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

Svi*_*ish 4 java soap web-services 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);
Run Code Online (Sandbox Code Playgroud)

这在主方法中运行良好,所以据我所知,该部分有效.但我无法弄清楚如何实际使用它.在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>
Run Code Online (Sandbox Code Playgroud)

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

Osw*_*Osw 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);
Run Code Online (Sandbox Code Playgroud)

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