3

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@WebParam経由のエンティティ)の値を読み取る方法は明らかですが、 Status内の値( Handle )にアクセスする方法はあります。WebParamは、私が理解している限り、属性をサポートせず、要素のみをサポートします。

解決策を尋ねる/探す別の方法は、RequestWrapperによって参照されている完全なBean(この場合はGetStatus )にアクセスする方法を尋ねることです。

Document / Literal / Bareに移行する場合は、パラメーターと戻り値にBeanを反映させることができますが、すべての情報がこれが最も広く推奨されるバインディングであることを示しているため、wrappedを使用してこれを解決したいと思います。

4

2 に答える 2

3

後世のために自己回答。

いいえ。ラップされたスタイルとして認定するには、要素のみが存在する必要があります。

夜通し JAX-WS 仕様を見直していた

2.3.1.2 ラッパー スタイル

WSDL 操作は、次の基準が満たされている場合にのみ、ラッパー スタイル マッピングの資格があります。

(i) 操作の入力メッセージと出力メッセージ (存在する場合) には、それぞれ 1 つの部分のみが含まれます。

(ii) 入力メッセージ部分が、ローカル名が操作名と等しい大域要素宣言を参照している

(iii) 出力メッセージ (存在する場合) 部分がグローバル要素宣言を参照している

(iv) 入力メッセージおよび出力メッセージ (存在する場合) 部分によって参照される要素 (以降、ラッパー要素と呼びます) は、両方とも xsd:sequence コンポジターを使用して定義された複合型です。

(v)ラッパー要素には子要素のみが含まれます。ワイルドカード (要素または属性)、xsd:choice、置換グループ (要素参照は許可されません) または属性などの他の構造を含んではなりません。さらに、nillable であってはなりません。

于 2012-03-31T10:42:14.187 に答える
0

javax.xml.ws.Holderオブジェクト内に含まれている限り、非要素も存在できます。

于 2012-12-04T14:01:47.223 に答える