我目前正在学习JAXB和Web服务,我遇到了这个我不知道的问题 怎么解决。
假设我有一个非常简单的类,我用JAXB注释。
@XmlRootElement
public class Customer {
private int custID;
private String custName;
//getters and setters
}
我有这个类,我作为Web服务公开。 (注意:为了简单起见,我在这里硬编码 但这连接到DB)
@WebService
public class CustomerWS {
@WebMethod(operationName = "customerData")
public Customer getCustomer(){
Customer cust = new Customer();
cust.setCustID(12345);
cust.setCustName("John Doe");
return cust;
}
}
SOAP信封响应是这样的。
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:customerDataResponse xmlns:ns2="http://test.com/">
<return>
<custID>12345</custID>
<custName>John Doe</custName>
</return>
</ns2:customerDataResponse>
</S:Body>
</S:Envelope>
现在假设我在客户实体中有另一个名为status的属性,他们希望这个属性作为soap的属性 响应如下,而不是成为客户元素的一部分。 (A =有效,I =无效)
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:customerDataResponse status="A" xmlns:ns2="http://test.com/">
<return>
<custID>12345</custID>
<custName>John Doe</custName>
</return>
</ns2:customerDataResponse>
</S:Body>
</S:Envelope>
@XmlRootElement
public class Customer {
private int custID;
private String custName;
//Another Annotation??? (A or I only)
private String status;
//getters and setters
}
如何注释我的课程以满足此要求?感谢
答案 0 :(得分:4)
Customer类上注释的所有内容都与客户元素相关。
这是因为JAX-WS负责形成消息信封,然后JAXB将消息正文封送到此信封中。当JAXB组织整个身体的时候,改变信封为时已晚。