如何在Java中使用SOAP Web服务

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

我会使用CXF,你也可以想到AXIS 2。

最好的方法可能是使用JAX RS参考这个例子

Example: wsimport -p stockquote http://stockquote.xyz/quote?wsdl This will generate the Java artifacts and compile them by importing the http://stockquote.xyz/quote?wsdl. 

一世

有些人在吸烟时可以使用apache或jax-ws。 您还可以使用从WSDL生成代码的工具,例如ws-import,但在我看来,使用Web服务的最佳方法是创建动态客户端,并且只调用您想要的操作,而不是wsdl中的所有操作。 您可以通过创建动态客户端来执行此操作:示例代码:

 String endpointUrl = ...; QName serviceName = new QName("http://com/ibm/was/wssample/echo/", "EchoService"); QName portName = new QName("http://com/ibm/was/wssample/echo/", "EchoServicePort"); /** Create a service and add at least one port to it. **/ Service service = Service.create(serviceName); service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING, endpointUrl); /** Create a Dispatch instance from a service.**/ Dispatch dispatch = service.createDispatch(portName, SOAPMessage.class, Service.Mode.MESSAGE); /** Create SOAPMessage request. **/ // compose a request message MessageFactory mf = MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL); // Create a message. This example works with the SOAPPART. SOAPMessage request = mf.createMessage(); SOAPPart part = request.getSOAPPart(); // Obtain the SOAPEnvelope and header and body elements. SOAPEnvelope env = part.getEnvelope(); SOAPHeader header = env.getHeader(); SOAPBody body = env.getBody(); // Construct the message payload. SOAPElement operation = body.addChildElement("invoke", "ns1", "http://com/ibm/was/wssample/echo/"); SOAPElement value = operation.addChildElement("arg0"); value.addTextNode("ping"); request.saveChanges(); /** Invoke the service endpoint. **/ SOAPMessage response = dispatch.invoke(request); /** Process the response. **/ 

使用基于WSDL创建的Stub或Java类来使用SOAP Web服务有很多选择。 但是如果有人想在没有创建任何Java类的情况下这样做,那么本文非常有帮助。 文章的代码片段:

 public String someMethod() throws MalformedURLException, IOException { //Code to make a webservice HTTP request String responseString = ""; String outputString = ""; String wsURL = ""; URL url = new URL(wsURL); URLConnection connection = url.openConnection(); HttpURLConnection httpConn = (HttpURLConnection)connection; ByteArrayOutputStream bout = new ByteArrayOutputStream(); String xmlInput = "entire SOAP Request"; byte[] buffer = new byte[xmlInput.length()]; buffer = xmlInput.getBytes(); bout.write(buffer); byte[] b = bout.toByteArray(); String SOAPAction = ""; // Set the appropriate HTTP parameters. httpConn.setRequestProperty("Content-Length", String.valueOf(b.length)); httpConn.setRequestProperty("Content-Type", "text/xml; charset=utf-8"); httpConn.setRequestProperty("SOAPAction", SOAPAction); httpConn.setRequestMethod("POST"); httpConn.setDoOutput(true); httpConn.setDoInput(true); OutputStream out = httpConn.getOutputStream(); //Write the content of the request to the outputstream of the HTTP Connection. out.write(b); out.close(); //Ready with sending the request. //Read the response. InputStreamReader isr = null; if (httpConn.getResponseCode() == 200) { isr = new InputStreamReader(httpConn.getInputStream()); } else { isr = new InputStreamReader(httpConn.getErrorStream()); } BufferedReader in = new BufferedReader(isr); //Write the SOAP message response to a String. while ((responseString = in.readLine()) != null) { outputString = outputString + responseString; } //Parse the String output to a org.w3c.dom.Document and be able to reach every node with the org.w3c.dom API. Document document = parseXmlFile(outputString); // Write a separate method to parse the xml input. NodeList nodeLst = document.getElementsByTagName(""); String elementValue = nodeLst.item(0).getTextContent(); System.out.println(elementValue); //Write the SOAP message formatted to the console. String formattedSOAPResponse = formatXML(outputString); // Write a separate method to format the XML input. System.out.println(formattedSOAPResponse); return elementValue; } 

在这里,您可以找到一个很好的教程,介绍如何通过WSDL创建和使用SOAP服务。 简而言之,您需要从命令行调用wsimport工具(您可以在jdk中找到它),其参数如-s(.java文件的源代码)-d(.class文件的目标)和wsdl链接。

 $ wsimport -s "C:\workspace\soap\src\main\java\com\test\soap\ws" -d "C:\workspace\soap\target\classes\com\test\soap\ws" http://localhost:8855/soap/test?wsdl 

创建存根之后,您可以非常轻松地调用webservices:

 TestHarnessService harnessService = new TestHarnessService(); ITestApi testApi = harnessService.getBasicHttpBindingITestApi(); testApi.resetLogMemoryTarget();