在第一种情况下,GetAmountResponse在命名空间中,http://ws.dsi.otn.com/dab而在默认(空)命名空间中。etatmontant
在您想要的新消息中GetAmountResponse,etat和montant都在 namespace 中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
}
你最终会得到第一种肥皂信息。
但是,如果您将响应类更改为如下所示:
@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 处理程序之类的东西来拦截响应并对其进行修改。但请注意,在消息上线之前更改消息并非易事。