2

私の仕事は、オブジェクトのリストがメソッドに渡される更新操作用の Web サービスを作成することです。

@WebMethod(operationName = "updateObjects", action = "urn:preferences")
public boolean updateObjects(List<MyObject> objects){

}

クラス MyObject は十分に単純です。

 @XmlRootElement(name="Object")
 public class MyObject{
    private String item1;
    private String item2;
 }

さて問題文。このメソッドの SOAP リクエスト (SOAP UI が生成したもの) を見ると、リクエストは次のようになります。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pref="preferences">
   <soapenv:Header/>
   <soapenv:Body>
      <pref:updateObjects>
         <!--Zero or more repetitions:-->
         <arg0>
            <!--Optional:-->
            <item1>?</item1>
            <!--Optional:-->
            <item2>?</item2>
         </arg0>
      </pref:updateObjects>
   </soapenv:Body>
</soapenv:Envelope>

しかし、私はそれを以下のように見せたいです。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pref="preferences">
   <soapenv:Header/>
   <soapenv:Body>
      <pref:updateObjects>
         <!--Zero or more repetitions:-->
         <Objects>
             <Object>
                <!--Optional:-->
                <item1>?</item1>
                <!--Optional:-->
                <item2>?</item2>
             </Object>
             <Object>
                <!--Optional:-->
                <item1>?</item1>
                <!--Optional:-->
                <item2>?</item2>
             </Object>
         </Objects>  
      </pref:updateObjects>
   </soapenv:Body>
</soapenv:Envelope>  

誰かアドバイスをお願いします。前もって感謝します。

4

1 に答える 1

5

List次のように、オブジェクトに「ラッパー」を追加するだけです。

 @XmlRootElement(name="objects")
 public class MyObjects{

    @XmlElement(name="object")
    List<MyObject> myObjects;
 }

public class MyObject{
    private String item1;
    private String item2;
 }

注:タグを使用してルート要素を からarg0に変更しても機能しません。これは、 yourが Web サービス定義のルート要素ではないためです。実際、それはあなたの一部です(したがって、JAXBはそれを破棄します)。objects@XmlRootElement(name="objects")<objects><wsdl:message>

変更する必要があるのは、好きなものに a@WebParam(name = "objects")を追加する Web サービス メッセージです。@WebMethod

@WebMethod(operationName = "updateObjects", action = "urn:preferences")
public boolean updateObjects(@WebParam(name = "objects") MyObjects objects){

}

「ラッパー」を使用したくない場合は、次のWebMethodように保持できます。

@WebMethod(operationName = "updateObjects", action = "urn:preferences")
public boolean updateObjects(@WebParam(name = "object") List<MyObject> objects){

}

しかし、あなたは<objects>ラッパーを失います。リクエストは次のようになります。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pref="preferences">
   <soapenv:Header/>
   <soapenv:Body>
      <pref:updateObjects>
         <!--Zero or more repetitions:-->
         <object>
            <!--Optional:-->
            <item1>?</item1>
            <!--Optional:-->
            <item2>?</item2>
         </object>
      </pref:updateObjects>
   </soapenv:Body>
</soapenv:Envelope>
于 2012-06-21T07:52:13.913 に答える