1

JAX-WSを使用すると、製品のエンティティのリストが返されます。

製品には次の属性があります。

  • id
  • 名前
  • 説明

説明の値はStringまたはnullです。製品のリストをデバッグしましたが、説明の値は有効です。descriptionがnullの場合、description要素はSOAP応答に含まれません。この要素をNULL値のSOAP応答に入れたい。

これは応答のダンプです:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:getProductsResponse xmlns:ns2="http://blabla.com/">
         <return>
            <idProduct>1</idProduct>
            <name>name</name>
            <description>some desc</description>
         </return>
         <return>
            <idProduct>2</idProduct>
            <name>name</name>
         </return>
      </ns2:getProductsResponse>
   </S:Body>
</S:Envelope>

が欲しいです:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:getProductsResponse xmlns:ns2="http://blabla.com/">
         <return>
            <idProduct>1</idProduct>
            <name>name</name>
            <description>some desc</description>
         </return>
         <return>
            <idProduct>2</idProduct>
            <name>name</name>
            <description>NULL</description>
         </return>
      </ns2:getProductsResponse>
   </S:Body>
</S:Envelope>

これは私のWebメソッドです:

@WebMethod(operationName = "getProducts")
public List<ProductDTO> getProducts(@WebParam(name = "idCompany") int idCompany) {
        ProductHelper helper = new ProductHelper();
        // this list was debuged and it is correct
        List<ProductDTO> products = helper.getAll(idCompany);
        return products;
}

JAX-WSRI2.2を使用しています-hudson-740

4

1 に答える 1

3

null問題は、コンピュータが文字列「<code>NULL」としてシリアル化する必要があることを認識できないことです。これはコンピュータにはまったく明らかではありません。(これもクライアントにはわかりません。)したがって、代わりに、コンピューターnullはデフォルトのJAXBの方法でを処理します。つまり、要素を省略します。

要素をそこに配置したい場合は、にJAXBアノテーションを使用してProductDTO、それが当てはまると言う必要があります。おそらく、要素をnull許容にしたいでしょう。それはあなたが探しているとあなたが言うものに正確に変換されることはありませんが、少なくとも正しいことをするはずです(そしてあなたのクライアントは対処できるはずです)。

これは、descriptionフィールド(またはgetDescription()メソッド)に次のような注釈を付けることになります。

@XmlElement(required=true, nillable=true)

これを行うもう1つの方法は、そうでなければ(そして実際の値)を返すときにgetDescription()文字列を返すメソッドを追加することです。これに伴う問題は、データベースバインディングレイヤーを混乱させる可能性があることです。要素に適切に注釈を付けることによって(そしてより良いシリアル化を使用して)仕事を適切に行うことは、はるかに少ない苦痛につながります。"NULL"null

于 2012-11-08T22:00:52.133 に答える