Какую настройку применить для JAX-WS, чтобы развернуть возвращаемые объекты в списки?
Я пытаюсь найти, если есть способ настроить, например, CSID2ExtRefs
операция для ChemSpider WebService, которая передает список строк в качестве одного из аргументов и возвращает список объектов:
<!-- Request element: -->
<s:element name="CSID2ExtRefs">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="CSID" type="s:int"/>
<s:element minOccurs="0" maxOccurs="1" name="datasources" type="tns:ArrayOfString"/>
<s:element minOccurs="0" maxOccurs="1" name="token" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>
<!-- Response element: -->
<s:element name="CSID2ExtRefsResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="CSID2ExtRefsResult" type="tns:ArrayOfExtRef"/>
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="ArrayOfExtRef">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="ExtRef" type="tns:ExtRef"/>
</s:sequence>
</s:complexType>
<s:complexType name="ArrayOfString">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="string" nillable="true" type="s:string"/>
</s:sequence>
</s:complexType>
Генерируется wsimport
Метод интерфейса есть (с jaxws:enableWrapperStyle = true
):
@WebMethod(operationName = "CSID2ExtRefs", action = "http://www.chemspider.com/CSID2ExtRefs")
@WebResult(name = "CSID2ExtRefsResult", targetNamespace = "http://www.chemspider.com/")
@RequestWrapper(localName = "CSID2ExtRefs", targetNamespace = "http://www.chemspider.com/", className = "chemspider.core.CSID2ExtRefsRequest")
@ResponseWrapper(localName = "CSID2ExtRefsResponse", targetNamespace = "http://www.chemspider.com/", className = "chemspider.core.CSID2ExtRefsResponse")
public ArrayOfExtRef csid2ExtRefs(
@WebParam(name = "CSID", targetNamespace = "http://www.chemspider.com/")
int csid,
@WebParam(name = "datasources", targetNamespace = "http://www.chemspider.com/")
ArrayOfString datasources,
@WebParam(name = "token", targetNamespace = "http://www.chemspider.com/")
String token);
но я бы хотел иметь ArrayOfExtRef
а также ArrayOfString
развернуть и обратиться к спискам, например, получить следующее:
public List<ExtRef> csid2ExtRefs(
@WebParam(...)
int csid,
@WebParam(...)
List<String> datasources,
@WebParam(...)
String token);
Если я сделаю это изменение вручную, JAX-WS работает нормально. Интересно, есть ли способ написать соответствующую настройку для этого?
1 ответ
Во-первых, все стандартные веб-службы еще не являются переносимыми. замещать
<s:element minOccurs="0" maxOccurs="1" name="datasources" type="tns:ArrayOfString"/>
с
<s:element name="datasources" type="xs:string" form="qualified" minOccurs="0" maxOccurs="unbounded" />
также заменить
<s:element minOccurs="0" maxOccurs="1" name="CSID2ExtRefsResult" type="tns:ArrayOfExtRef"/>
с
<s:element minOccurs="0" maxOccurs="unbounded" name="CSID2ExtRefsResult" type="tns:ExtRef"/>
Также вы можете удалить complexType, такой как "ArrayOfString",ArrayOfExtRef.