当前位置: 首页 > 知识库问答 >
问题:

带有原始XML的Perl SOAP::Lite WSDL

索梓
2023-03-14

我想用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被解析,如下所示:

&lt;IODATA&gt;

等等。

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>

我怎样才能改变这一点?

事先非常感谢。

克里斯

共有1个答案

东方和志
2023-03-14

我想用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方面,我只是在做