【问题标题】:Webservice client to invoke a webservice client - javaWeb服务客户端调用Web服务客户端 - java
【发布时间】:2014-09-04 14:51:14
【问题描述】:

我必须创建一个 java 客户端来执行 webservice 。我有一个包含整个 SOAP 请求(信封、标头、正文)的 XML。

如何通过传递包含soap请求的xml文件来编写java代码来执行webservice?

我尝试了很多搜索,但找不到执行此操作的示例

服务器上的 Web 服务在 SOAP 1.1 上,内容类型为“text/xml”

例如 wsdlLocation="http://localhost:8080/helloservice/hello?wsdl"

网络服务没有输入参数,这就是为什么数据必须完全作为soap请求传递的原因。传递的数据是 xml 的形式。

示例 SOAP 请求 xml 文件示例 (Sample.xml)

<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Body>
<putTxlife1203Info xmlns="http://www.openuri.org/">
<TXLife>

</TXLife>
</putTxlife1203Info>
</env:Body>
</env:Envelope>

如果有人能提供样品那就太好了

【问题讨论】:

  • 我假设在 wsdl 中的 import 或 include 语句中的 url 中有错字。

标签: java soap xsd wsdl jax-ws


【解决方案1】:
import javax.xml.soap.*;

public String callTestService(String soapRequestXml, String url) throws Exception {
    // Create SOAP Connection
    SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
    SOAPConnection soapConnection = soapConnectionFactory.createConnection();

    SOAPMessage soapRequest = MessageFactory.newInstance().createMessage(new MimeHeaders(),
            new ByteArrayInputStream(soapRequestXml.getBytes()));

    // Send SOAP Message to SOAP Server
    SOAPMessage soapResponse = soapConnection.call(soapRequest, url);

    ByteArrayOutputStream soapResponseBaos = new ByteArrayOutputStream();
    soapResponse.writeTo(soapResponseBaos);
    String soapResponseXml = soapResponseBaos.toString();

    return soapResponseXml;
}

【讨论】:

    【解决方案2】:

    如果您在文件中保存了带有 SOAP 请求的完整 xml 并且需要直接发送它(我猜是为了进行测试),那么只需使用普通的 http 客户端并使用它进行 POST 请求。 以下是一些示例:

    Sending HTTP Post request with SOAP action using org.apache.http

    【讨论】:

      【解决方案3】:

      要生成客户端服务方法和东西,请使用wsimport工具如下:

      wsimport -keep http://localhost:8080/helloservice/hello?wsdl
      

      来源:http://www.mkyong.com/webservices/jax-ws/jax-ws-hello-world-example/,如果您真的(我的意思是真的)想要手动完成所有操作,说明也在那里。我更喜欢生成而不是创建东西,所以让我们保持简单。

      然后您使用以下内容创建客户端:

      package com.mkyong.client;
      
      import com.mkyong.ws.HelloWorld;
      import com.mkyong.ws.HelloWorldImplService;
      
      public class HelloWorldClient{
      
          public static void main(String[] args) {
      
          HelloWorldImplService helloService = new HelloWorldImplService();
          HelloWorld hello = helloService.getHelloWorldImplPort();
      
          System.out.println(hello.getHelloWorldAsString("mkyong"));
      
         }
      
      }
      

      这是来自上面链接的直接引用,方法名称可能会有所不同,具体取决于您为服务器端的实际服务所遵循的教程。

      【讨论】:

      • wsimport 自带jdk。
      • wsimport 不起作用,因为服务器 wsdl 不以命名空间 开头
      • 你检查过浏览器上的wsdl url内容吗?看看那里一切正常吗?如果 wsdl 看起来还可以,请查看 stackoverflow.com/questions/3981873/…..
      猜你喜欢
      • 2010-11-09
      • 2010-09-17
      • 1970-01-01
      • 1970-01-01
      • 2014-01-18
      • 1970-01-01
      • 2011-04-25
      • 2012-10-30
      • 1970-01-01
      相关资源
      最近更新 更多