在第一種情況下,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
}
你最終將與第一種類型肥皂信息。
但是,如果你改變響應類看起來像這個:
@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的意義」這兩個消息雖然他們看起來不一樣。
如果你絕對想讓它看起來像這樣,我認爲你將不得不去「低級」,並使用類似a SOAP handler to intercept the response and modify it。但請注意,在消息傳遞之前更改消息並不是一項簡單的任務。
請爲我的任務有何迴應? –