2013-02-25 113 views
2

生成WSDL定義故障錯誤我使用WSDL代的問題在2010年德爾福我寫了一個例子,複製生成的WSDL文件:SOAP:到2010年德爾福

<?xml version="1.0"?> 
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xs="http://www.w3.org/2001/XMLSchema" name="IHalloWeltIntfservice" targetNamespace="http://www.micos.de/namespace/" xmlns:tns="http://www.micos.de/namespace/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:ns1="http://www.borland.com/namespaces/Types" xmlns:ns2="urn:XSTypen" xmlns:ns3="urn:uHalloWeltIntf"> 
    <types>  
    <xs:schema targetNamespace="urn:uHalloWeltIntf" xmlns="urn:uHalloWeltIntf"> 
     <xs:complexType name="EHalloWelt"> 
     <xs:sequence> 
      <xs:element name="KundenId" type="xs:int"/> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:schema> 
    </types> 
    <message name="HoleHalloWeltAlsXML2Request"> 
    <part name="InstitutionId" type="xs:int"/> 
    <part name="KundenId" type="xs:int"/> 
    </message> 
    <message name="HoleHalloWeltAlsXML2Response"> 
    <part name="return" type="xs:string"/> 
    </message> 
    <message name="HoleHalloWeltAlsXML2fault0"> 
    <part name="EHalloWelt" type="ns3:EHalloWelt"/> 
    </message> 
    <portType name="IHalloWeltIntf">  
    <operation name="HoleHalloWeltAlsXML"> 
     <input message="tns:HoleHalloWeltAlsXML2Request"/> 
     <output message="tns:HoleHalloWeltAlsXML2Response"/> 
     <fault name="EKeineVitalwerteVorhanden" message="tns:HoleHalloWeltAlsXML2fault0"/> 
    </operation> 
    </portType> 
    <binding name="IHalloWeltIntfbinding" type="tns:IHalloWeltIntf"> 
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>  
    <operation name="HoleHalloWeltAlsXML"> 
     <soap:operation soapAction="urn:uHalloWeltIntf-IHalloWeltIntf#HoleHalloWeltAlsXML" style="rpc"/> 
     <input> 
     <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:uHalloWeltIntf-IHalloWeltIntf"/> 
     </input> 
     <output> 
     <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:uHalloWeltIntf-IHalloWeltIntf"/> 
     </output> 
     <fault> 
     <soap:fault use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:uHalloWeltIntf-IHalloWeltIntf"></soap:fault> 
     </fault> 
    </operation> 
    </binding> 
    <service name="IHalloWeltIntfservice"> 
    <port name="IHalloWeltIntfPort" binding="tns:IHalloWeltIntfbinding"> 
     <soap:address location="http://localhost:1024/soap/IHalloWeltIntf"/> 
    </port> 
    </service> 
</definitions> 

起初文件看起來不錯,但是如果我嘗試將它導入到NetBeans中,ant wscompile目標會告訴我綁定塊中有一個缺少的屬性。 soap:fault元素沒有名稱屬性。在我看來,這個屬性在WSDL定義中是必需的。這是Delphi中的一個bug嗎?還是有什麼方法可以使WSDL在其他語言中工作?

回答

0

Delphi 2010生成的WSDL使用RPC編碼的SOAP風格(請參閱NetBeans 7.0 and JAX-RPC Web Services)。

如果在WSDL手動修正這個錯誤,在NetBeans 7.2 SAX-RPC進口商生成所需的Java類:

<fault name="EKeineVitalwerteVorhanden"> 
    <soap:fault name="EKeineVitalwerteVorhanden" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:uHalloWeltIntf-IHalloWeltIntf"></soap:fault> 
    </fault> 

發電機輸出:

ant -f C:\\Users\\... test.wsdl4-client-wscompile 
init: 
wscompile-init: 
test.wsdl4-client-wscompile: 
Copying 1 file to C:\Users\...\build\generated-sources\jax-rpc\wsdl 
Warnung: Verarbeitung von WS-I-nicht-entsprechendem Vorgang "HoleHalloWeltAlsXML" mit RPC-Stil und SOAP-kodiert 
Warnung: R2716/R2726 WSI-BasicProfile Ver. 1.0, Namespace-Attribut unzulässig in doc/lit oder rpc/lit für soapbind:fault: "EKeineVitalwerteVorhanden" 
BUILD SUCCESSFUL (total time: 2 seconds) 
+0

您的幫助十分感謝。 – elwoodj 2013-02-25 18:09:55