2012-04-11 80 views
4

場景:如何修改SOAP :: Lite中的命名空間生成?

  • 客戶是使用SOAP::Lite Perl腳本。
  • 服務器是使用Spring和CXF的基於Java的應用程序。

我的客戶是基於WSDL產生以下SOAP請求:

<?xml version="1.0" encoding="UTF-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
     <createFolder xmlns="http://xyz.com/"> 
      <parentId xsi:type="xsd:string">1</parentId> 
      <folderName xsi:type="xsd:string">Test</folderName> 
     </createFolder> 
    </soap:Body> 
</soap:Envelope> 

這個請求將無法針對CXF。幾次調查後,我發現了以下手動生產要求將工作:

<?xml version="1.0" encoding="UTF-8"?> 
<soap:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xyz="http://xyz.com/"> 
    <soap:Body> 
     <xyz:createFolder> 
      <parentId xsi:type="xsd:string">1</parentId> 
      <folderName xsi:type="xsd:string">Test</folderName> 
     </xyz:createFolder> 
    </soap:Body> 
</soap:Envelope> 

的區別是元素createFolder命名空間的定義。

我的問題是:如何配置SOAPLite來創建工作的SOAP請求?

反之亦然:如何將CXF配置爲接受SOAP :: Lite請求樣式?

+0

它也可能是CXF的配置問題。 – Philipp 2012-04-11 13:24:28

回答

3

查看ns。如果給出了片段的根元素類似限定名

使用下列內容:

SOAP::Lite->new->proxy('http://somewhere.com') 
    ->ns('http://xyz.com/', 'xyz')->createFolder( 
     SOAP::Data->new(name => 'parentId', value => 1, type => 'xsd:string') 
    , SOAP::Data->new(name => 'folderName', value => 'Test') 
    ); 

我有以下幾點:

<?xml version="1.0" encoding="UTF-8"?> 
<soap:Envelope 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
    xmlns:xyz="http://xyz.com/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
> 
    <soap:Body> 
    <xyz:createFolder> 
     <parentId xsi:type="xsd:string">1</parentId> 
     <folderName xsi:type="xsd:string">Test</folderName> 
    </xyz:createFolder> 
    </soap:Body> 
</soap:Envelope> 

而且我認爲這是你想要的。