在第一种情况下,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。但请注意,在消息传递之前更改消息并不是一项简单的任务。
请为我的任务有何回应? –