Как извлечь атрибут JAX-WS @RequestWrapper (или полный бин) - PullRequest
3 голосов
/ 31 марта 2012

Можно ли извлечь атрибут (как в значении атрибута XML) из объекта RequestWrapper?

В моей реализации я хотел бы использовать значение атрибута, но не могу ссылаться на него с @WebParam, так как это только для элементов (я полагаю)

@ SOAPBinding определен как «Документ / Литерал / Упаковка»

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 (может определять элементы XML с помощью WebParam):

@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
) { ... }

Очевидно, как я могу прочитать значение bean-компонента @RequestWrapper Status ( Entity через @WebParam), но есть ли способ получить доступ к значению ( Handle ) в статусе. WebParam, насколько я понимаю, не поддерживает атрибуты, только элементы.

Альтернативным способом запроса / поиска решения может быть вопрос о том, как получить доступ к полному компоненту, на который ссылается RequestWrapper, в данном случае GetStatus .

Я знаю, что если я перейду к Document / Literal / Bare, у меня могут быть просто параметры и возвращаемое значение, отражающие bean-компонент, но я бы предпочел решить эту проблему, используя обернутую, поскольку все информационные данные указывают на то, что это наиболее широко предпочтительное связывание.

Ответы [ 2 ]

3 голосов
/ 31 марта 2012

Самоответчик для потомков.

Нет. Чтобы считаться обернутым стилем, должны присутствовать только элементы.

В течение ночи просматривал спецификацию JAX-WS

2.3.1.2 Wrapper Style

Операция WSDL соответствует отображению стиля оболочки, только если выполнены следующие критерии:

(i) Входные и выходные сообщения операции (если присутствуют) содержат только одну часть

(ii) Часть входного сообщения относится к объявлению глобального элемента, локальное имя которого равно имени операции

(iii) Часть выходного сообщения (если имеется) относится к объявлению глобального элемента

(iv) Элементы, на которые ссылаются части входного и выходного сообщения (если они имеются) (далее именуемые как элементы-обертки) являются сложными типами, определенными с помощью компоновщика xsd: sequence

(v) Элементы оболочки содержат только дочерние элементы , они НЕ ДОЛЖНЫ содержать другие структуры, такие как в качестве подстановочных знаков (элемент или атрибут), xsd: choice, группы подстановки (ссылки на элементы не являются разрешено) или атрибуты; кроме того, они НЕ ДОЛЖНЫ быть нильфированными.

0 голосов
/ 04 декабря 2012

Также могут присутствовать неэлементы, если они содержатся внутри объекта javax.xml.ws.Holder .

...