我想用Perl做一个SOAP请求,我想发送原始的XML数据,比如
$xml = "<IODATA>
<TEST>
Hello World
</TEST>
</IODATA>";
我使用的SOAP::Lite如下所示:
my $soap = SOAP::Lite->service('http://localhost/cms/WebService/RDCMSXMLServer.WSDL');
$soap->Execute($xml, "", "");
但当我检查SOAP主体时,我的xml被解析,如下所示:
<IODATA>
等等。
WSDL文件:
<?xml version='1.0' encoding='UTF-8' ?>
<definitions
name='RDCMSXMLServer'
targetNamespace='http://tempuri.org/RDCMSXMLServer/webservice/'
xmlns:wsdlns='http://tempuri.org/RDCMSXMLServer/webservice/'
xmlns:typens='http://tempuri.org/RDCMSXMLServer/type/'
xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/'
xmlns:xsd='http://www.w3.org/2001/XMLSchema'
xmlns:stk='http://schemas.microsoft.com/soap-toolkit/wsdl-extension'
xmlns:dime='http://schemas.xmlsoap.org/ws/2002/04/dime/wsdl/'
xmlns:ref='http://schemas.xmlsoap.org/ws/2002/04/reference/'
xmlns:content='http://schemas.xmlsoap.org/ws/2002/04/content-type/'
xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'
xmlns='http://schemas.xmlsoap.org/wsdl/'>
<types>
<schema
targetNamespace='http://tempuri.org/RDCMSXMLServer/type/'
xmlns='http://www.w3.org/2001/XMLSchema'
xmlns:SOAP-ENC='http://schemas.xmlsoap.org/soap/encoding/'
xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'
elementFormDefault='qualified'>
<import namespace='http://schemas.xmlsoap.org/soap/encoding/'/>
<import namespace='http://schemas.xmlsoap.org/wsdl/'/>
<import namespace='http://schemas.xmlsoap.org/ws/2002/04/reference/'/>
<import namespace='http://schemas.xmlsoap.org/ws/2002/04/content-type/'/>
</schema>
</types>
<message name='XmlServer.Execute'>
<part name='sParamA' type='xsd:string'/>
<part name='sErrorA' type='xsd:anyType'/>
<part name='sResultInfoA' type='xsd:anyType'/>
</message>
<message name='XmlServer.ExecuteResponse'>
<part name='Result' type='xsd:string'/>
<part name='sErrorA' type='xsd:anyType'/>
<part name='sResultInfoA' type='xsd:anyType'/>
</message>
<portType name='XmlServerSoapPort'>
<operation name='Execute' parameterOrder='sParamA sErrorA sResultInfoA'>
<input message='wsdlns:XmlServer.Execute'/>
<output message='wsdlns:XmlServer.ExecuteResponse'/>
</operation>
</portType>
<binding name='XmlServerSoapBinding' type='wsdlns:XmlServerSoapPort' >
<stk:binding preferredEncoding='UTF-8'/>
<soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/>
<operation name='Execute'>
<soap:operation soapAction='http://tempuri.org/RDCMSXMLServer/action/XmlServer.Execute'/>
<input>
<soap:body
use='encoded'
namespace='http://tempuri.org/RDCMSXMLServer/message/'
encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'
parts='sParamA sErrorA sResultInfoA'/>
</input>
<output>
<soap:body
use='encoded'
namespace='http://tempuri.org/RDCMSXMLServer/message/'
encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'
parts='Result sErrorA sResultInfoA'/>
</output>
</operation>
</binding>
<service name='RDCMSXMLServer' >
<port name='XmlServerSoapPort' binding='wsdlns:XmlServerSoapBinding' >
<soap:address location='http://10.1.102.104:80/CMS/webservice/RDCMSXMLServer.WSDL'/>
</port>
</service>
</definitions>
我怎样才能改变这一点?
事先非常感谢。
克里斯
我想用Perl发出SOAP请求,并发送原始XML数据
让我看看。在SOAP::Data文档中有一部分是关于使用原始XML的。这是:
在某些情况下,您可能需要使用未序列化的原始XML文本对消息进行编码。要使用原始XML实例化SOAP::Data对象,请执行以下操作:
$xml_content = "<foo><bar>123</bar></foo>";
$elem = SOAP::Data->type('xml' => $xml_content);
您也可以用代码来实现这一点。可能是这样的:
my $xml = <<'XML';
<IODATA>
<TEST>
Hello World
</TEST>
</IODATA>
XML
my $soap = SOAP::Lite->service('http://localhost/cms/WebService/RDCMSXMLServer.WSDL');
my $res = $soap->sayHello(SOAP::Data->type( 'xml' => $xml ));
但是,这将无法工作,因为在您的WSDL文件中没有定义名为sayHello
的方法!我没有尝试您的WSDL,但是您可能想再次通读SOAP::Lite文档来自己做这件事。
我相信它可以像这样工作,或者类似(未经测试!):
use SOAP::Lite;
my $soap = SOAP::Lite->service("http://localhost/cms/WebService/RDCMSXMLServer.WSDL");
my $result = $soap->Execute($sParamA, $sErrorA,$ sResultInfoA);
print $result->result();
您可能也会发现这很有帮助。
问题内容: 这是来自JS新手的两部分问题。 因此,我正在尝试遵循Thomas Davis的教程,使用requireJS创建一个主干应用程序。 如何通过对以XML提供数据的服务器的ajax调用来创建Backbone集合?collections.fetch()似乎期望使用JSON后端。 在尝试某些事情时,我得到了以下代码,其中在Ajax成功回调中填充集合“ bookStore”时页面没有刷新。 这是我
问题内容: 我目前无法在KSTREAM APP 中 反序列化avro PRIMITIVE密钥 用avro模式编码的密钥(已在模式注册表中注册), 当我使用kafka-avro-console-consumer时,我可以看到密钥已正确反序列化 但是不可能使其在KSTREAM应用程序中工作 密钥的avro模式是主要的: 我已经关注了合流的文档 它对于该值工作得很好,但是该键将是一个字符串,该字符串包含
让我预先感谢你的帮助! 我在一个spring boot应用程序中有一个奇怪的行为。我来给你解释一下: 我正在用一些不错的rest-json服务包装一些遗留的Web服务(自定义xml消息)(通过spring-mvc和Spring boots并使用jackson序列化东西) 为了与遗留系统通信,我创建了一个自定义XmlMapper、序列化器和反序列化器。 最后,我创建了一个httpclientconf
问题内容: 我想以类似于http://www.google.com/ig/api?weather=Mountain+View的方式输出原始xml,但使用PHP。 我的网络服务器上有一个非常简单的php脚本: 我在Chrome / firefox中只能看到“ sample_name”。我想看看: 我找不到简单的教程。 谢谢 问题答案: 默认情况下,PHP将Content-Type设置为text /
问题内容: 我已经在JAX-WS中设置了SOAP WebServiceProvider,但是在弄清楚如何从SOAPMessage(或任何Node)对象中获取原始XML时遇到了麻烦。这是我现在所获取的代码示例,也是我尝试获取XML的地方: 是否有一种简单的方法来获取原始请求的XML?如果有一种方法可以通过设置其他类型的Provider(例如Source)来获取原始XML,那么我也愿意这样做。 问题答
我有邮递员(在Chrome不打开的),我试图使用原始JSON做一个POST请求。 在Body选项卡中,我选择了“raw”和“JSON(application/JSON)”作为主体: 对于头,我有1, 在PHP方面,我只是在做