【发布时间】:2012-04-14 14:50:13
【问题描述】:
是否可以从 RequestWrapper 对象中提取属性(如 XML 属性值)?
在我的实现中,我想使用属性的值,但不能用@WebParam 引用它,因为这仅适用于元素(我相信)
@SOAPBinding 被定义为“Document/Literal/Wrapped”
WSDL(相关部分,目标属性位于**):
<s:element name="GetStatus">
<s:complexType>
<s:element minOccurs="0" maxOccurs="1" name="Entity" type="s0:Entity"/>
**<s:attribute name="Handle" type="s:string"/>
</s:complexType>
</s:element>
<s:element name="GetStatusResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="StatusCode" type="s0:StatusCode"/>
<s:element minOccurs="0" maxOccurs="1" name="Server" type="s0:Server"/>
</s:sequence>
</s:complexType>
</s:element>
<message name="GetStatusIn">
<part name="parameters" element="s0:GetStatus"/>
</message>
<message name="GetStatusOut">
<part name="parameters" element="s0:GetStatusResponse"/>
</message>
<portType name="Service">
<operation name="GetStatus">
<input message="s0:GetStatusIn"/>
<output message="s0:GetStatusOut"/>
</operation>
</portType>
SEI 抽象方法(可以用 WebParam 指定 XML 元素):
@WebMethod(operationName="GetStatus")
@RequestWrapper(localName=“GetStatus",className="com.example.GetStatus")
@ResponseWrapper(localName=“GetStatusResponse",className="com.example.GetStatusResponse")
public void getStatus(
@WebParam(name="Entity”)Entity entity,
@WebParam(name="StatusCode",mode=WebParam.Mode.OUT)Holder<StatusCode> statusCode,
@WebParam(name="Server", mode=WebParam.Mode.OUT)Holder<Server> server
);
实施:
@Override
public void getStatus(
Entity entity,
Holder<StatusCode> statusCode,
Holder<Server> server
) { ... }
很明显我可以读取@RequestWrapper bean Status 的值(Entity 通过@WebParam),但是有什么方法可以访问该值(句柄)在状态中。据我了解,WebParam 不支持属性,只支持元素。
另一种询问/寻求解决方案的方法可能是询问如何访问 RequestWrapper 引用的完整 bean,在本例中为 GetStatus。
我知道如果我转换到 Document/Literal/Bare,我可以简单地让参数和返回值反映 bean,但我更喜欢使用 Wrapped 来解决这个问题,因为所有信息都指向这是最广泛首选的绑定。
【问题讨论】:
标签: soap wsdl jaxb jax-ws jax-ws-customization