是否可以从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的值状态(实体来自@WebParam),但有没有办法访问该值(处理)状态。据我所知,WebParam不支持属性,只支持元素。
询问/寻求解决方案的另一种方法可能是询问如何访问RequestWrapper引用的完整bean,在本例中为 GetStatus 。
我知道如果我转换到Document / Literal / Bare我可以简单地让参数和返回值反映bean,但我更愿意使用包装作为所有信息点解决这个问题,这是最广泛使用的绑定。
答案 0 :(得分:3)
后人自我回答。
没有。要符合包装样式,只能存在元素。
一夜之间审查JAX-WS规范
2.3.1.2包装样式
只有满足以下条件时,WSDL操作才有资格进行包装器样式映射:
(i)操作的输入和输出消息(如果存在)每个都只包含一个部分
(ii)输入消息部分引用一个全局元素声明,其localname等于操作名称
(iii)输出消息(如果存在)部分引用全局元素声明
(iv)输入和输出消息(如果存在)部分引用的元素(以下称为 包装器元素)都是使用xsd:sequence compositor
定义的复杂类型(v)包装元素只包含子元素,它们必须不包含其他结构 作为通配符(元素或属性),xsd:choice,替换组(元素引用不是 允许的)或属性;此外,它们不能是无罪的。
答案 1 :(得分:0)
非元素也可以存在,只要它们包含在javax.xml.ws.Holder对象中。