因此我的Web服务应该采用一列数据(ID)并将相应数据的2列表返回到请求的ID。我明白我应该为此目的使用序列,所以我已经制定了这个模式:
<wsdl:types>
<xsd:schema targetNamespace="urn:myurn" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="GetWSIDListByDPIDList">
<xsd:complexType>
<xsd:sequence maxOccurs="unbounded" minOccurs="1">
<xsd:element name="DPID" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="GetWSIDListByDPIDListResponse">
<xsd:complexType>
<xsd:sequence maxOccurs="unbounded" minOccurs="0">
<xsd:element name="DP" type="xsd:string"/>
<xsd:element name="WSID" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element></xsd:schema>
Request是一个字符串序列,response是一对字符串序列。似乎没错。
但是当我开始编写实现代码时(顺便说一下它是自上而下的方法)我意识到我需要某种第三个元素 - 行元素,包含2个字符串元素(DP和WSID),这是GetWSIDListByDPIDListRespose的子节点。
我正在使用Axiom编写实现,所以看起来像这样:
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace omNs = fac.createOMNamespace("urn:myurn", "urn");
OMElement response = fac.createOMElement("GetWSIDListByDPIDListResponse",omNs);
OMElement WSIDListItem = fac.createOMElement("WSIDListItem",omNs);
OMElement WSID = fac.createOMElement("WSID",omNs);
WSID.addChild(fac.createOMText("0123123"));
OMElement DP = fac.createOMElement("DP",omNs);
DP.addChild(fac.createOMText("0321321"));
WSIDListItem.addChild(DP);
WSIDListItem.addChild(WSID);
response.addChild(WSIDListItem);
return response;
最后我得到了这样的回应:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<urn:GetWSIDListByDPIDListResponse xmlns:urn="urn:fnc.service.livelink.opentext.com">
<urn:WSIDListItem>
<urn:DP>0321321</urn:DP>
<urn:WSID>0123123</urn:WSID>
</urn:WSIDListItem>
</urn:GetWSIDListByDPIDListResponse>
</soapenv:Body>
</soapenv:Envelope>
因此,为响应添加更多WSIDListItem,我会得到一些像表格的东西。但是看起来不像WSDL中描述的那样。我甚至不理解使用我的wsdl描述会有什么反应。
所以问题是返回2列数据的正确方法是什么?我的方法是否正确?我应该修复什么,实现或WSDL来匹配我的实现?
提前致谢。
答案 0 :(得分:0)
好的,所以我有点自己回答了我的问题。响应,匹配我的WSDL看起来像
f1<int>(1, 2); // ill-formed?
f2<int>(1, 2); // ill-formed?
这对于眼睛来说是一种误导。所以我决定更好的决定是改变wsdl响应模式并将DPID作为属性和值返回,如下所示:
<urn:GetWSIDListByDPIDList>
<DP>1</DP>
<WSID>2</WSID>
<DP>3</DP>
<WSID>4</WSID>
</urn:GetWSIDListByDPIDList>
同事提出了另一种方法:
<WSID DPID="Some ID">1</WSID>