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

时间:2012-03-29 09:31:58

标签: java web-services soap java-7

在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中,我使用如下所示的请求调用此相同的服务:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://foo.bar.com/webservice">
   <soapenv:Header/>
   <soapenv:Body>
      <web:SomeWebServiceRequest acAccountName="name" acAccountPassword="password">
         <SomeRequest>
            <id>012345678901234</id>
            <action>Fix</action>
         </SomeRequest>
      </web:SomeWebServiceRequest>
   </soapenv:Body>
</soapenv:Envelope>

如何在Java中执行相同的请求?我的目标是我有一长串的这些id,我需要为每个人运行这样的请求。在SoapUI中手动执行它有点烦人,因此我想使用简单的Java控制台应用程序自动执行它。

2 个答案:

答案 0 :(得分:8)

下一步是从您的服务中获取Port

Service service = Service.create(new URL(wsdlURL), serviceQN); // this is where you are.
QName portQName = new QName(portNamespace, portName);
YourPortInterface port = service.getPort(portQName, YourPortInterface.class);

YourPortInteface将在wsimport期间生成,或者如果您有足够的“阅读”wsdl经验,则可以自己创建和注释。

答案 1 :(得分:2)

您可以将JAX-WS用作客户端。

基本上,您使用wsimport创建包装Web服务的存根java类,然后在Java代码中使用这些存根。 存根处理所有XML转换,包括您的请求和响应。

教程在这里:http://docs.oracle.com/javaee/5/tutorial/doc/bnayn.html
查找名为“简单的JAX-WS客户端”

的部分