gpt4 book ai didi

java - 在 JAXB 中创建 SOAP 属性

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:26:01 25 4
gpt4 key购买 nike

我目前正在学习 JAXB 和 Web 服务,但我遇到了这个我不知道的问题如何解决。

假设我有一个用 JAXB 注释的非常简单的类。

@XmlRootElement
public class Customer {
private int custID;
private String custName;
//getters and setters
}

我有这个类,我将其公开为 Web 服务。 (注意:为了简单起见,我在这里对所有内容进行了硬编码但这连接到数据库)

@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
}

如何注释我的类以满足此要求?谢谢

最佳答案

在 Customer 类上注释的所有内容都将与 customer 元素相关。

这是因为 JAX-WS 负责形成消息信封,然后 JAXB 将消息主体编码到这个信封中。当 JAXB 组织 body 时,改变信封为时已晚。

关于java - 在 JAXB 中创建 SOAP 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5753949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com