Моя настройка следующая. У меня есть пружинный компонент org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean, использующий этот интерфейс:
<bean id="snIncidentService" class="org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean">
<property name="wsdlDocumentUrl" value="https://subdom.service-now.com/incident.do?WSDL" />
<property name="namespaceUri" value="http://www.service-now.com" />
<property name="serviceName" value="ServiceNow_incident" />
<property name="portName" value="ServiceNowSoap" />
<property name="serviceInterface" value="edu.liberty.webservice.SNIncident" />
<property name="username" value="****" />
<property name="password" value="****" />
</bean>
package edu.liberty.webservice;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
@WebService(name = "ServiceNowSoap", targetNamespace = "http://www.service-now.com/incident")
@SOAPBinding(style=SOAPBinding.Style.DOCUMENT)
public interface SNIncident {
@WebMethod(operationName = "insert", action = "http://www.service-now.com/incident/insert")
@WebResult(name = "insertResponse", targetNamespace = "http://www.service-now.com/incident")
public InsertResponse insert(@WebParam(name="insert", targetNamespace = "http://www.service-now.com/incident") Insert inc);
}
Insert.java
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"skills",
"uponApproval",
... (еще около 50 аргументов)
@XmlRootElement(name = "insert", namespace="http://www.service-now.com/incident")
public class Insert {
protected String skills;
@XmlElement(name = "upon_approval")
protected String uponApproval;
.. (те же аргументы)
Я могу позвонить в веб-сервис, и сервис теперь создает инцидент, но он не принимает во внимание аргументы, которые яперейти к нему.
Insert inc = new Insert();
inc.setPriority(new BigInteger("1"));
inc.setShortDescription("test WS");
incidentService.insert(inc);
Сообщение SOAP:
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:insert xmlns:ns2="http://www.service-now.com/incident">
<ns2:insert>
<priority>1</priority>
<short_description>test WS</short_description>
</ns2:insert>
</ns2:insert>
</S:Body>
</S:Envelope>
Я считаю, что проблема заключается во втором теге вставки, но я не могу понять, как остановить его отправку.
WSDL можно увидеть на демонстрационном сайте службы в настоящее время здесь:
https://demo05.service -now.com /ident.do? WSDL
user: admin
pw: admin
Когда я использую wsimport, метод сервиса, который он создает, включает в себя все 67 аргументов в вызове метода сервиса.К сожалению, это работает.Я действительно хочу абстрагировать все эти аргументы в объект.Есть ли способ заставить java развернуть объект Insert без добавления дополнительного тега insert к сообщению SAOP?