Tag: soap

CXF使用内容过滤或屏蔽soap字段记录请求和响应

我想通过内容过滤记录来自某个特定端点的所有传入请求和响应。 即当我有这样的要求时: Apples Photo with some apples in it anVzdCBhIHJhbmRvbSB0ZXh0DQpqdXN0IGEgcmFuZG9tIHRleHQNCmp1c3QgYSByYW5kb20gdGV4dA0KanVzdCBhIHJhbmRvbSB0ZXh0DQpqdXN0IGEgcmFuZG9tIHRleHQNCmp1c3QgYSByYW5kb20gdGV4dA0KanVzdCBhIHJhbmRvbSB0ZXh0DQp3b3csIGkgZGlkbid0IHRob3VnaHQgdGhhdCBhbnlvbmUgd291bGQgYmUgaW50ZXJlc3RlZCBpbiBkZWNvZGluZyB0aGlzLiBjb25ncmF0cyE= 我想过滤它,以便它看起来像这样的日志 Apples Photo with some apples in it hidden 或完全删除m:照片元素。 我发现CXF有一些LoggingInInterceptor和LoggingOutInterceptor,我可以编写自己的拦截器来做到这一点。 然而,这将是一项工作要做,所以我的问题是:你知道更好,开箱即用的解决方案吗?

如何在Java中使用SOAP Web服务

有人可以帮我一些关于如何在Java中使用Web服务WSDL的链接和其他方面吗?

忽略Apache Axis 1.4中的意外元素的任何解决方法?

在2012年为Apache Axis 2 “Apache AXIS忽略/跳过解析附加元素”之前询问了这个问题。对于Axis 1.4,还没有解决方法吗? 问题定义 例如; 1-在开发[使用Axis 1.4 ]时,我们的wsdl中有一个soap响应定义(’ResponseGetCustomerInfo’): … … 2-当我们得到这样的结果时,很高兴看到响应是可解析的: 1 raki 3-一段时间后,我们的服务提供商更改了服务响应并将新的输出字段添加到响应中, 我们不知道何时或为何 ; 1 raki Raki Bandao 4-新的响应理论上与旧版本兼容,因为没有字段既没有删除也没有改变 。 但Axis无法解析响应: “SAXException: Invalid Element … ” 我不想更新wsdl并再次重新生成Web服务客户端 。 那么,有没有办法在响应中跳过“意外的[新添加的]元素”? 或任何解决方法? 我正在尝试很多方法,但还没有找到任何解决方案。

覆盖CXFerror handling

我正在开发一些基于Web服务的应用程序,我有一个关于Apache CXF解组的问题。 在我们的项目中,我们使用CXF 2.4.1版本。 当某些SOAP请求不正确时(例如某些字段是文本而不是数字),CXF会抛出标准的SOAPFaultException,并使用标准字段构建SOAP响应,例如: soap:Client Unmarshalling Error: some field missing 项目要求说,如果出现任何故障,系统需要以其他格式响应,例如: 2732 Unmarshalling Error: some field missing some details … 所以问题是:如何以某种方式覆盖此error handling并以我的格式响应,而不是默认? 提前致谢。 PS我试图调查一些ValidationEventHandler主体,但它在CXF 2.0及更高版本中以其他方式工作。

使用jax-ws调用位于负载均衡器上的Web服务,返回http状态为302,但是当我使用SoapUI时它工作正常

当我使用jax-ws调用位于负载均衡器上的Web服务时,它会返回 服务器发送HTTP状态码302:暂时移动 然后失败,但是当我使用SoapUI时它工作正常。 有没有办法可以配置服务来正确处理这个问题? 我使用wsimport生成了webservice代码并进行调用 NotificationWebService service = new NotificationWebService(wsdlLocation, qName); NotificationWebServiceSoap serviceSoap = service.getNotificationWebServiceSoap(); String xmlString = serviceSoap.getRSAPublicKeyXMLString(); 我被困住了,我无法在任何地方找到解决方案,所以任何帮助都会受到赞赏。

使用JAXRPC-RI Web服务客户端时如何设置连接超时?

我正在使用一些遗留组件,其中我们使用一些使用JAXRPC-RI(参考实现)库构建的客户端代码与SOAP Web服务(我绝对,积极地厌恶的技术)进行交互。 我有兴趣能够使用存根设置超时,以便万一Web服务服务器在X秒内没有回复,应用程序不会在那里永远等待响应。 我正在使用Apache Axis生成的客户端/存根,您可以使用org.apache.axis.client.Stub.setTimeout()来设置超时。 对于我的生活,我无法弄清楚在使用JAXRPC-RI创建的存根时如何设置超时: 我实例化的端口类扩展了com.sun.xml.rpc.client.StubBase并实现了javax.xml.rpc.Stub和com.sun.xml.rpc.spi.runtime.StubBase 。 这些类中的JavaDocs都没有提到任何类型的超时或方法来执行此操作。 尝试使用stub._setProperty(“axis.connection.timeout”, 1000); 在运行时导致exception: javax.xml.rpc.JAXRPCException: Stub does not recognize property: axis.connection.timeout 有没有人对使用JAXRPC-RI客户端时如何设置/强制执行超时有任何想法? 它甚至可能吗?

即使正确发送SOAP请求,Axis2也始终接收空参数?

更新:我现在已经解决了这个问题 – 请滚动到底部以获取有关修复的信息 嗨,大家好, 我有一个用Java编写的Web服务,托管在Axis2 / Tomcat / Apache服务器上。 我的客户端软件是用C#编写的。 我对java2wsdl生成wsdl文件的方式有一些恼人的问题,这确实让我在早期遇到了一些麻烦,但是有了这个问题我完全被难倒了。 基本上发生的事情是客户端看到Web服务正常,并发送一个完全有效(或至少,它看起来对我来说有效)带有参数的SOAP请求。 在服务器上,执行正确的Web方法,但参数都为null。 我的Web服务会检测到这一点,并建立一个响应,客户端可以很好地接收和理解。 我的预感是,Axis2在某个地方的表面不尽如人意,但考虑到我对java2wsdl的头痛,也许我需要的只是改变我的wsdl文件。 这是wsdl文件: 这是一个示例请求和响应: 请求: 123456-654321 响应 -101 ERROR: Empty Serial 有没有人知道会出现什么问题? 响应中的错误消息只能在请求中的serialcode参数为空/ null时发送,因此我猜测Axis2读取参数的方式有问题。 任何帮助深表感谢。 ================================================== ========== 如何修复此问题: 这是对Aldo要求提供有关我如何解决此问题的更多信息的回应。 我不确定为什么这个修复工作 – 也许它只是Axis2中的一个错误或其他东西。 无论哪种方式,YMMV,因为我不知道问题是由我的设置或其他原因引起的。 我只能说,通过做到以下几点,一切都开始奏效了。 无论如何,自动生成的WSDL文件为Web请求及其参数创建复杂元素类型,即使唯一的参数是简单类型(如字符串或整数)也是如此。 我所做的是遍历并为参数创建正确的简单类型标记(例如’serialcode’或’date-string’),然后使用对简单类型的引用替换对WSDL文件中其他位置的复杂类型的引用。 一个例子如下: 自动生成的WSDL方法和参数 基本上你应该做的是丢弃自动生成的参数并创建简单类型。 然后,您可以修改“请求”标记以使用“类型”而不是“元素”,并使用新创建的简单类型。 修改/固定WSDL 显然,这取决于你的参数究竟是什么。 在我的例子中,它们都是标准的简单类型,如字符串和整数。 如果您传递的是多个参数,则可能需要保留自动生成的元素,但要确保元素引用简单类型,而不是仅仅将type属性包含为’xs:string’或类似的东西。 道歉我不能更清楚这一点,但正如我之前所说 – 我不知道为什么会这样。 最后一件事:通过删除请求标记中的’element’引用属性 – 您可能会在Axis2日志中收到解析器警告。 到目前为止,这并没有给我带来任何问题,但如果遇到麻烦,需要注意一些问题。

使用xpath在Java中使用名称空间解析XML

我试图在java中解析SOAP请求,但代码没有返回任何节点这里是代码可以任何人发现错误 String xml=”dfasf@google.comPfasdfRem91″; System.out.println(xml); DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); domFactory.setNamespaceAware(true); DocumentBuilder builder = domFactory.newDocumentBuilder(); Document doc = builder.parse(new InputSource(new StringReader(xml))); XPath xpath = XPathFactory.newInstance().newXPath(); // XPath Query for showing all nodes value try { XPathExpression expr = xpath.compile(“/soapenv:Envelope/soapenv:Header/authInfo/password”); Object result = expr.evaluate(doc, XPathConstants.NODESET); NodeList nodes = (NodeList) result; System.out.println(“Got ” + nodes.getLength() + ” nodes”); // […]

一个简单的Java SOAP客户端

我是Web服务的新手,我一直试图在Internet上找到一个简单的Java SOAP客户端程序。 我想做的就是发送SOAP消息并收到一些响应。 有一个网站提供免费的网络服务。 http://www.webservicex.net/ws/WSDetails.aspx?WSID=17&CATID=7 您输入国家/地区名称,它会为您提供国家/地区的ISD代码。 就这么简单。 我想将国家名称发送到Web服务,并仅使用Java而不使用任何外部jar来获取其ISD代码。

从SOAP请求中删除命名空间

我已导入WSDL并使用它来发送SOAP请求。 它看起来像这样: …More XML… 问题是Calculate元素中的xmlns=”urn:xx.WSDL.xxxxxWebService”部分。 Web服务无法接受此操作。 Web服务不喜欢这样的命名空间…… 使用SoapUI我发现这个请求工作正常: …More XML… 那么,如何将请求从第一个版本更改为第二个版本? (不使用肮脏的技巧!) (如果这会导致正确的请求格式,则重新导入不是问题。) 再次:不允许任何肮脏的技巧,比如黑客攻击请求流来修改它! 虽然我还没有完全测试过,但似乎C#/ VS2010和Delphi 2010也无法使用我想要调用的Web服务。 似乎是用Java编写的Web服务。 SoapUI恰好用Java编写,因此我们有一个Java客户端与Java服务通信,这似乎工作得很好。 但任何其他客户? 无论如何,还有时间添加两个标签:“Java”,因为它是一个Java服务,而“vs2010”因为.NET也不喜欢这个服务。 我正准备在.NET中编写一个包含此服务的包装器,希望能够正常工作……但事实并非如此。 所以这是一个非常严重的缺陷,可能是Java缺陷……