首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过SOAP web服务向OpenGTS服务器发送XML请求时出错

通过SOAP web服务向OpenGTS服务器发送XML请求时出错
EN

Stack Overflow用户
提问于 2013-06-08 01:04:52
回答 2查看 906关注 0票数 0

我正在尝试通过web服务向OpenGTS服务器发送XML请求。这是请求:

代码语言:javascript
复制
<GTSRequest command="version">
    <Authorization account="demo" user="admin" password=""/>
</GTSRequest>

当服务器运行时,我得到以下错误:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<GTSResponse result="error">
<Message code="RQ0031"><![CDATA[SOAP XML syntax error]]></Message>
<Comment><![CDATA[Found SOAP request:(inputXML is missing refer to the WSDL file.]]></Comment>
</GTSResponse>

我和Windev17一起工作。我试图同时以字符串和XMLDocument的形式发送请求,但出现了相同的错误。考虑到这是由于XML语法的原因,我尝试在字符串中使用双引号,在内部引号前面使用反斜杠,使用'+‘连接,但我得到了相同的错误。

下面是我的代码:

代码语言:javascript
复制
inputXML est une chaîne
inputXML = ...
"<GTSRequest command=""commands"">"+...
"<Authorization account=""demo"" user=""admin"" password=""/>"+...
"</GTSRequest>"
gtsServiceRequestReturn est une chaîne
gtsServiceRequestReturn = GTSServiceService.gtsServiceRequest(inputXML)
Info(gtsServiceRequestReturn)

下面是我使用的WSDL文件的内容。

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://service.war.extra.opengts.org" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://service.war.extra.opengts.org" xmlns:intf="http://service.war.extra.opengts.org" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <wsdl:types>
  <schema elementFormDefault="qualified" targetNamespace="http://service.war.extra.opengts.org" xmlns="http://www.w3.org/2001/XMLSchema">
   <element name="inputXML" type="xsd:string"/>
   <element name="gtsServiceRequestReturn" type="xsd:string"/>
  </schema>
 </wsdl:types>
   <wsdl:message name="gtsServiceRequestResponse">
      <wsdl:part element="impl:gtsServiceRequestReturn" name="gtsServiceRequestReturn"/>
   </wsdl:message>
   <wsdl:message name="gtsServiceRequestRequest">
      <wsdl:part element="impl:inputXML" name="inputXML"/>
   </wsdl:message>
   <wsdl:portType name="GTSService">
      <wsdl:operation name="gtsServiceRequest" parameterOrder="inputXML">
         <wsdl:input message="impl:gtsServiceRequestRequest" name="gtsServiceRequestRequest"/>
         <wsdl:output message="impl:gtsServiceRequestResponse" name="gtsServiceRequestResponse"/>
      </wsdl:operation>
   </wsdl:portType>
   <wsdl:binding name="GTSServiceSoapBinding" type="impl:GTSService">
      <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
      <wsdl:operation name="gtsServiceRequest">
         <wsdlsoap:operation soapAction=""/>
         <wsdl:input name="gtsServiceRequestRequest">
            <wsdlsoap:body use="literal"/>
         </wsdl:input>
         <wsdl:output name="gtsServiceRequestResponse">
            <wsdlsoap:body use="literal"/>
         </wsdl:output>
      </wsdl:operation>
   </wsdl:binding>
   <wsdl:service name="GTSServiceService">
      <wsdl:port binding="impl:GTSServiceSoapBinding" name="GTSService">
         <wsdlsoap:address location="http://localhost:8080/track/Service"/>
      </wsdl:port>
   </wsdl:service>
</wsdl:definitions>

有人能帮帮我吗?提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2013-08-29 17:04:44

我在尝试向opengts web服务发出xml请求时也遇到了同样的异常。我后来克服了这个问题。

我认为您使用了基于saop的工具(如saopui)来发出请求。我的建议是不要使用基于soap的请求,只需发出一个简单的xml请求即可。我的意思是删除soap头和soap主体标签。请参考下面的示例:

代码语言:javascript
复制
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.war.extra.opengts.org">
   <soapenv:Header/>
   <soapenv:Body>
  <GTSRequest command="version">
    <Authorization account="raju" user="admin" password="raju"/>
   </GTSRequest>      
   </soapenv:Body>
</soapenv:Envelope>

与上面的请求类似,您可以调用您的request....just、移除soap标头并像下面这样调用。它工作正常

代码语言:javascript
复制
<GTSRequest command="version">
    <Authorization account="raju" user="admin" password="raju"/>
   </GTSRequest>  

结果:

代码语言:javascript
复制
<GTSResponse command="version" result="success">
 <Version>E2.4.0-B26</Version>
 </GTSResponse>

我正在使用高级REST客户端chrome扩展来生成此结果

票数 1
EN

Stack Overflow用户

发布于 2014-05-04 10:37:37

您传递的嵌入在SOAP消息中的inputXML数据结构可能不是实体引用编码的。如果选择不对嵌套的XML结构进行实体引用编码,第二种选择是用CDATA节包装内部XML。当您将嵌套的XML字符串嵌入到SOAP中时,CDATA部分是SOAP-UI的最佳选择。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16989444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档