Как сделать звонок через javax.xml.ws.Service

Создан новый стандартный проект Java 7 в Eclipse и успешно удалось получить экземпляр 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? Моя цель состоит в том, чтобы у меня был длинный список этих ids, и мне нужно выполнить такой запрос для каждого из них. Делать это вручную в SoapUI немного раздражает, поэтому я хотел бы автоматизировать его с помощью простого консольного Java-приложения.

2 ответа

Решение

Следующий шаг - получить 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.

Вы можете использовать JAX-WS в качестве клиента.

В основном вы используете wsimport для создания классов-заглушек Java, которые обертывают веб-сервис, а затем вы используете эти заглушки в своем коде Java. Заглушки заботятся обо всем переводе XML, как для вашего запроса, так и для ответа.

Учебное пособие находится здесь: http://docs.oracle.com/javaee/5/tutorial/doc/bnayn.html
Ищите часть под названием: "Простой клиент JAX-WS"

Другие вопросы по тегам