2

私のセットアップは次のとおりです。このインターフェースを使用して、Spring Bean 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);
}

挿入.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;

.. (同じ引数)

Web サービスを呼び出すことができ、サービスがインシデントを作成するようになりましたが、渡した引数が考慮されていません。

    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>

問題は 2 番目の挿入タグにあると思いますが、送信を停止する方法がわかりません。

WSDL は、次の service now デモ サイトで確認できます。

https://demo05.service-now.com/incident.do?WSDL

ユーザー: 管理者

pw: 管理者

wsimport を使用すると、作成されるサービス メソッドには、サービス メソッド呼び出しに 67 個の引数がすべて含まれます。残念ながら、それは機能します。これらすべての引数をオブジェクトに抽象化したいのです。SAOPメッセージに追加の挿入タグを追加せずに、Javaに挿入オブジェクトを展開させる方法はありますか?

4

1 に答える 1

1

問題は、Insert オブジェクトにパラメーターとして名前を付けていることのようです。これは、2 番目の "

より良いオプションがあるかもしれません (必要ですか?) が、これは私が見つけたもので、うまくいくようです:

Insert メソッドを変更して、Insert オブジェクトの代わりにパラメーター (名前付きで名前空間なし) を受け取るようにすると、修正されるはずです。

public InsertResponse insert(
           @WebParam(name="priority", targetNamespace = "") BigInteger priority,
           @WebParam(name="short_description", targetNamespace = "") String shortDescription,
           @WebParam(name="assigned_to", targetNamespace = "") String assignedTo
);

何をしようとしても、必要に応じてパラメーターを追加します。

于 2012-02-21T19:21:56.300 に答える