最初のケースでは、GetAmountResponse
はネームスペースhttp://ws.dsi.otn.com/dab
にありetat
、 とmontant
はデフォルト (空の) ネームスペースにあります。
必要な新しいメッセージではGetAmountResponse
、etat
とmontant
はすべて名前空間 にありますhttp://ws.dsi.otn.com/dab
。
名前空間は、クラスの名前空間から制御できます。すべてで同じ名前空間を使用すると、それらが同じ名前空間に配置され、クラスはデフォルトのままになり、デフォルトで空の名前空間になります。
たとえば、Web サービス クラスに次のようなものがあるとします。
@WebMethod
public
@WebResult(name = "getAmountResponse", targetNamespace = "http://ws.dsi.otn.com/dab")
AmountResponse getAmount(
@WebParam(name = "getAmountRequest", targetNamespace = "http://ws.dsi.otn.com/dab") AmountRequest request) {
AmountResponse response = new AmountResponse();
response.setEtat(0);
response.setMontant(500.0);
return response;
}
次のような応答クラスを使用します。
@XmlRootElement
public class AmountResponse {
private int etat;
private double montant;
// getter and setters omitted
}
最初のタイプの SOAP メッセージが表示されます。
ただし、応答クラスを次のように変更すると、次のようになります。
@XmlRootElement(namespace = "http://ws.dsi.otn.com/dab")
@XmlAccessorType(XmlAccessType.NONE)
public class AmountResponse {
@XmlElement(namespace = "http://ws.dsi.otn.com/dab")
private int etat;
@XmlElement(namespace = "http://ws.dsi.otn.com/dab")
private double montant;
// getters and setter omitted
}
すべてのタグを同じ名前空間に入れると、必要な新しいタイプのメッセージと同等のものを取得できます。あなたがこれを正確に得るとは思わないので、私は同等だと言いました:
<GetAmountResponse xmlns="http://ws.dsi.otn.com/dab">
<etat>0</etat>
<montant>500.0</montant>
</GetAmountResponse>
代わりに、次のようなものが得られる可能性が高くなります。
<ns2:getAmountResponse xmlns:ns2="http://ws.dsi.otn.com/dab">
<ns2:etat>0</ns2:etat>
<ns2:montant>500.0</ns2:montant>
</ns2:getAmountResponse>
見た目は同じではありませんが、両方のメッセージの "XML の意味" は同じです。
絶対にそのように見せたい場合は、「低レベル」になり、SOAPハンドラーのようなものを使用して応答を傍受して変更する必要があると思います. ただし、メッセージが送信される前に変更するのは簡単なことではないことに注意してください。