Tag: soap

如何从SOAP Logical Handler获取有效负载对象

我正在学习如何在JAX-WS SOAP Web服务中创建逻辑处理程序。 在这里,我试图获取有效载荷数据,并希望打印用于测试。 但是我遇到了问题。 这是我的LogincalHandler代码 public class HelloMessengerLogicalHandler implements LogicalHandler { public void close(MessageContext ctx) { } public boolean handleFault(LogicalMessageContext ctx) { return false; } public boolean handleMessage(LogicalMessageContext ctx) { Boolean outbound = (Boolean) ctx.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); if(outbound) { LogicalMessage message = ctx.getMessage(); //Source payload = message.getPayload(); JAXBContext jaxbContext; try { jaxbContext = JAXBContext.newInstance(Person.class); Object jaxbPayload […]

使用自定义X509KeyManager时,Java无法为SSL握手确定匹配的密码套件

我正在使用Java7和JAX-WS 2.2。 对于SOAP Web服务,我需要创建一个自定义X509KeyManager ,以便为JKS密钥库中的每个连接客户端找到正确的证书。 但是,我已经在努力让我的自定义密钥管理器运行。 到目前为止,我使用的是默认值(从初始化的KeyManagerFactory检索),它基本上可以工作 – 但当然它没有选择正确的证书。 所以第一个想法是创建一个自定义X509KeyManager ,它保存原始密钥管理器,只写出一些日志消息,但通常使用默认行为。 出于某种原因,根本不起作用。 无法建立SSL握手。 在ClientHello之后 ,日志显示以下错误: Allow unsafe renegotiation: false Allow legacy hello messages: true Is initial handshake: true Is secure renegotiation: false Thread-3, READ: TLSv1 Handshake, length = 149 *** ClientHello, TLSv1 RandomCookie: GMT: 1476877930 bytes = { 207, 226, 8, 128, 40, 207, 47, […]

如何使用简单的String(字符串格式的xml)调用SOAP Web服务

我有这个代表XML的字符串: String soapCall=” “; soapCall+=idApp; soapCall+=””; soapCall+=versonApp; soapCall+=” Android “; 我有这个肥皂网络服务: http://stats.mywebsite.com/ws/adddownload 现在,我需要将该字符串传递给android上的soap webservice,但我不知道方式,我知道我需要使用httpcliente: HttpClient httpClient = new DefaultHttpClient(); HttpContext localContext = new BasicHttpContext(); 但我不知道如何用该字符串调用soapwebservice。 有人有代码示例吗? 我在谷歌上找不到它。 我不想使用图书馆,我需要自己做 谢谢 编辑:这是现在的代码,但它无法正常工作,我得到错误500内部服务器错误: public static byte[] addDownloadIntoServer(){ byte[] result = null; String SERVER_URL=”http://stats.mywebsite.com/ws/server.php”; String SOAP_ACTION=”addDownload”; String body=””; body+=”” +SectionManager.instance.app_id+””; body+=””+SectionManager.instance.app_version+””; body+=”android Android “; HttpParams httpParameters = new BasicHttpParams(); […]

Grizzly – java.lang.NoSuchMethodError:javax.xml.ws.WebFault.messageName

我有一个Web服务的wsdl文件。 我想测试客户端和服务器之间的交互。 为此,我运行带有嵌入式灰熊的模拟服务器。 关于实现模拟服务器的问题。 我使用wsimport和write实现从wsdl(和xsd)生成了一个接口。 当在灰熊上运行时,我收到以下错误: com.sun.xml.ws.server.ServerRtException: [failed to localize] cannot.load.wsdl(META-INF/wsdl/test.wsdl) 我使用以下代码运行Web服务: HttpHandler httpHandler = new JaxwsHandler(new TestImpl()); server.getServerConfiguration().addHttpHandler(httpHandler, “/test”); 问题是Grizzly无法找到wsdl和xsd文件。 在嵌入式玻璃鱼中它的工作。 EDIT1 我将wsdlLocation更改为“test.wsdl”及其工作。 但现在灰熊说: java.lang.NoSuchMethodError: javax.xml.ws.WebFault.messageName()Ljava/lang/String; EDIT2 如果使用JDK1.7就可以了。 但我需要JDK 1.6

如何通过javax.xml.ws.Service进行调用

在Eclipse中创建了一个新的标准java 7项目,并成功设法获取javax.xml.ws.Service的实例,如下所示: String wsdlURL = “http://example.com:3000/v1_0/foo/bar/SomeService?wsdl”; String namespace = “http://foo.bar.com/webservice”; String serviceName = “SomeService”; QName serviceQN = new QName(namespace, serviceName); Service service = Service.create(new URL(wsdlURL), serviceQN); 这在主方法中运行良好,所以据我所知,该部分有效。 但我无法弄清楚如何实际使用它。 在SoapUI中,我使用如下所示的请求调用此相同的服务: 012345678901234 Fix 如何在Java中执行相同的请求? 我的目标是我有一个很长的这些id列表,我需要为每个id运行这样的请求。 在SoapUI中手动执行它有点烦人,因此我想使用简单的Java控制台应用程序自动执行它。

如何用Java发送原始SOAP请求?

我需要向服务器发送原始SOAP请求。 我的请求看起来像 POST http://10.76.243.43:8080/registry/services/xds-iti18 HTTP/1.1 Accept-Encoding: gzip,deflate Content-Type: application/soap+xml;charset=UTF-8 Content-Length: 6383 Host: 10.76.243.43:8080 Connection: Keep-Alive User-Agent: Apache-HttpClient/4.1.1 (java 1.5) ? ? ? ? ? ? e gero 它是SOAP UI生成的标准原始请求(使用Web服务的wsdl),所以如果我发送它,我会得到HTTP代码200和一些正常的响应。 我想用Java发送它,所以我做了以下几点 byte[] encoded = Files.readAllBytes(Paths.get(“C:\\Users\\timofb\\Documents\\testtest.txt”));//file with my raw request String soapXml = new String(encoded, StandardCharsets.UTF_8); Socket socket = new Socket(“10.76.243.43”, 8080); BufferedWriter out = new BufferedWriter( […]

使用Apache CXF的WS-Security UsernameToken

我有一个与SOAP服务交互的java应用程序。 我使用WSDL通过CXF生成java客户端,但我需要使用ws-securityvalidation我的调用。 我正在寻找一种仅使用代码的方法,我没有任何xml配置。 这是我尝试过的: Map ctx = ((BindingProvider)port).getRequestContext(); ctx.put(“ws-security.username”, “joe”); ctx.put(“ws-security.password”, “joespassword”); port.makeSoapCall(); 但是我收到无效WS-Security标头的解析错误。 这样做的正确方法是什么? 在SOAP UI中,我可以通过右键单击soap标头,单击“Add WSS UsernameToken”,然后选择“Password Text”来轻松完成此操作。

使用AXIS2创建的ADB-stub在客户端获取原始XML SOAP响应

我使用AXIS2创建的ADB-stub访问SOAP服务。 我想记录服务返回的任何Axis Fault的原始XML响应。 我可以将这些错误捕获为“ServiceError”。 但是,我找不到一种方法来检索原始XML(参见下面的示例)。 我找到了一种使用getOMElement访问原始XML请求/响应以进行常规处理的方法(参见下面的示例)。 但是,这不适用于故障。 如何使用ADB存根获取原始XML错误? 示例Java代码: public void testRequest(String URL) throws AxisFault { MyServiceStub myservice = new MyServiceStub(URL); MyRequest req = new MyRequest(); try { TypeMyFunctionResponse response = myservice.myFunction(req); // logging full soap response System.out.println(“SOAP Response: ” + response.getOMElement(null, OMAbstractFactory.getOMFactory()) .toStringWithConsume()); } catch (RemoteException e) { //… } catch (ServiceError e) { […]

Kerberos错误:GSSHeader找不到正确的标记

我正在尝试将Kerberos身份validation连接到SOAP服务wsdl url。 我能够成功建立连接并进行服务呼叫。 启动服务器后,我能够至少进行一次成功的服务呼叫。 但是在几次请求(1次或更多次)之后,我突然收到无效的令牌错误。 一旦我收到错误,未来的调用就不起作用,错误仍然存​​在。 如果我重新启动服务器,那么服务调用至少会工作一次。 以上循环继续。 我无法弄清楚为什么突然令牌失效,尽管它早先工作。 并且重新启动服务器使令牌再次有效 。 这是错误堆栈跟踪: Caused by: GSSException: Defective token detected (Mechanism level: GSSHeader did not find the right tag) at sun.security.jgss.GSSHeader.(GSSHeader.java:97) at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:237) at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:179)

带有javax.xml.soap的SOAP消息 – 名称空间错误?

以下是我应该从我的java Web应用程序调用的.NET Web服务的通用示例SOAP请求: int 我可以使用以下代码段从java控制台应用程序生成类似的东西: import javax.xml.XMLConstants; import javax.xml.namespace.QName; import javax.xml.soap.MessageFactory; import javax.xml.soap.SOAPBody; import javax.xml.soap.SOAPBodyElement; import javax.xml.soap.SOAPConnection; import javax.xml.soap.SOAPConnectionFactory; import javax.xml.soap.SOAPElement; import javax.xml.soap.SOAPHeader; import javax.xml.soap.SOAPMessage; … SOAPConnectionFactory sfc = SOAPConnectionFactory.newInstance(); SOAPConnection connection = sfc.createConnection(); MessageFactory mf = MessageFactory.newInstance(); SOAPMessage sm = mf.createMessage(); SOAPHeader sh = sm.getSOAPHeader(); SOAPBody sb = sm.getSOAPBody(); sh.detachNode(); QName bodyName = new […]