2012-02-03 97 views
1

所以我使用的是傳統的WSDL,我想從其生成一些Java代碼來獲取的究竟是什麼網絡服務不,因爲我覺得Java代碼更容易更好的主意比WSDL閱讀。然而,使用Apache CFX源發生器插件使用下面的WSDL文件是給我下面的錯誤(同一個在soapUI的):WSDL的Apache CXF問題

遇到非法擴展屬性「的soapAction」。擴展屬性必須位於WSDL之外的名稱空間中。

所以基本上,我想改變WSDL,使它仍然正確描述Web服務,但實際上可以通過插件來使用。任何建議將最讚賞。我包含了整個WSDL,因爲我不知道哪些部分可能是相關的,所以對於巨大的文本牆而言是道歉的。

<?xml version="1.0" encoding="utf-8"?> 
<wsdl:definitions xmlns:tns="http://api.voiceforge.com/SOAPI" 
targetNamespace="http://api.voiceforge.com/SOAPI" 
xmlns:impl="http://api.voiceforge.com/SOAPI" 
xmlns:intf="http://api.voiceforge.com/SOAPI" 
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" 
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 


<!-- Types --> 

    <wsdl:types> 
     <xsd:schema elementFormDefault="qualified" targetNamespace="http://api.voiceforge.com/SOAPI"> 


     <!-- Say --> 

     <xsd:complexType name="ComplexTextInfo"> 
     <xsd:sequence> 
      <xsd:element name="SynthString" type="xsd:string" /> 
      <xsd:element minOccurs="0" maxOccurs="1" name="Encoding" type="xsd:string" /> 
     </xsd:sequence> 
     </xsd:complexType> 

     <xsd:complexType name="ComplexVoiceInfo"> 
     <xsd:all> 
      <xsd:element name="Owner" type="xsd:string" /> 
      <xsd:element name="Name" type="xsd:string" /> 
     </xsd:all> 
     </xsd:complexType> 

     <xsd:complexType name="ComplexAudioInfo"> 
     <xsd:all> 
      <xsd:element name="DeliveryType" type="xsd:string" /> 
      <xsd:element name="Format" type="xsd:string" /> 
      <xsd:element name="SignalRate" type="xsd:string" /> 
     </xsd:all> 
     </xsd:complexType> 

     <xsd:complexType name="ComplexAudioData"> 
     <xsd:all> 
      <xsd:element name="DeliveryType" type="xsd:string" /> 
      <xsd:element name="Format" type="xsd:string" /> 
      <xsd:element name="Data" type="xsd:string" /> 
     </xsd:all> 
     </xsd:complexType> 


     <!-- CreateAccount --> 

     <xsd:complexType name="ComplexCreateUserInfo"> 
     <xsd:all> 
      <xsd:element name="UserID" type="xsd:string" /> 
      <xsd:element name="Password" type="xsd:string" /> 
      <xsd:element name="DOB" type="xsd:string" /> 
      <xsd:element name="Email" type="xsd:string" /> 
      <xsd:element name="ZipCode" type="xsd:string" /> 
      <xsd:element name="Gender" type="xsd:string" /> 
     </xsd:all> 
     </xsd:complexType> 


     <!-- Voice Search --> 

     <xsd:complexType name="ComplexQuery"> 
     <xsd:all> 
      <xsd:element name="Owner" type="xsd:string" /> 
      <xsd:element name="Name" type="xsd:string" /> 
      <xsd:element name="Age" type="xsd:string" /> 
      <xsd:element name="Gender" type="xsd:string" /> 
      <xsd:element name="Language" type="xsd:string" /> 
     </xsd:all> 
     </xsd:complexType> 

     <xsd:complexType name="ComplexQueryResult"> 
     <xsd:all> 
      <xsd:element name="Owner" type="xsd:string" /> 
      <xsd:element name="Name" type="xsd:string" /> 
      <xsd:element name="Age" type="xsd:string" /> 
      <xsd:element name="Gender" type="xsd:string" /> 
      <xsd:element name="Language" type="xsd:string" /> 
      <xsd:element name="Dialect" type="xsd:string" /> 
     </xsd:all> 
     </xsd:complexType> 

     <xsd:complexType name="ComplexQueryResultArray"> 
     <xsd:sequence> 
      <xsd:element maxOccurs="unbounded" name="Voice" nillable="true" type="tns:ComplexQueryResult"/> 
     </xsd:sequence> 
     </xsd:complexType> 

    </xsd:schema> 
    </wsdl:types> 


    <!-- Messages --> 

    <wsdl:message name="GetSessionIDSoapIN"> 
    <wsdl:part name="ApplicationID" type="xsd:string" /> 
    <wsdl:part name="UserID" type="xsd:string" /> 
    </wsdl:message> 

    <wsdl:message name="GetSessionIDSoapOUT"> 
    <wsdl:part name="SessionID" type="xsd:string" /> 
    <wsdl:part name="Error" type="xsd:string" /> 
    </wsdl:message> 

    <wsdl:message name="SaySoapIN"> 
    <wsdl:part name="SessionID" type="xsd:string" /> 
    <wsdl:part name="Text" type="tns:ComplexTextInfo" /> 
    <wsdl:part name="VoiceInfo" type="tns:ComplexVoiceInfo" /> 
    <wsdl:part name="AudioInfo" type="tns:ComplexAudioInfo" /> 
    </wsdl:message> 

    <wsdl:message name="SaySoapOUT"> 
    <wsdl:part name="Audio" type="tns:ComplexAudioData" /> 
    <wsdl:part name="Error" type="xsd:string" /> 
    </wsdl:message> 

    <wsdl:message name="CreateAccountSoapIN"> 
    <wsdl:part name="ApplicationID" type="xsd:string" /> 
    <wsdl:part name="UserInfo" type="tns:ComplexCreateUserInfo" /> 
    </wsdl:message> 

    <wsdl:message name="CreateAccountSoapOUT"> 
    <wsdl:part name="UserID" type="xsd:string" /> 
    <wsdl:part name="Error" type="xsd:string" /> 
    </wsdl:message> 

    <wsdl:message name="VoiceSearchSoapIN"> 
    <wsdl:part name="SessionID" type="xsd:string" /> 
    <wsdl:part name="Query" type="tns:ComplexQuery" /> 
    </wsdl:message> 

    <wsdl:message name="VoiceSearchSoapOUT"> 
    <wsdl:part name="VoiceList" type="tns:ComplexQueryResultArray" /> 
    <wsdl:part name="Error" type="xsd:string" /> 
    </wsdl:message> 

    <wsdl:message name="GetAccountInfoSoapIN"> 
    <wsdl:part name="ApplicationID" type="xsd:string" /> 
    <wsdl:part name="UserID" type="xsd:string" /> 
    </wsdl:message> 

    <wsdl:message name="GetAccountInfoSoapOUT"> 
    <wsdl:part name="SynthesesRemaining" type="xsd:int" /> 
    <wsdl:part name="DefaultVoiceInfo" type="tns:ComplexVoiceInfo" /> 
    <wsdl:part name="Error" type="xsd:string" /> 
    </wsdl:message> 

    <wsdl:message name="UpdateAccountInfoSoapIN"> 
    <wsdl:part name="ApplicationID" type="xsd:string" /> 
    <wsdl:part name="UserID" type="xsd:string" /> 
    <wsdl:part name="DefaultVoiceInfo" type="tns:ComplexVoiceInfo" /> 
    <wsdl:part name="ModifySynthesisAmount" type="xsd:int" /> 
    </wsdl:message> 

    <wsdl:message name="UpdateAccountInfoSoapOUT"> 
    <wsdl:part name="SynthesesRemaining" type="xsd:int" /> 
    <wsdl:part name="DefaultVoiceInfo" type="tns:ComplexVoiceInfo" /> 
    <wsdl:part name="Error" type="xsd:string" /> 
    </wsdl:message> 


    <!-- Port Types --> 

    <wsdl:portType name="VF-HTTPS-Binding"> 
    <wsdl:operation name="GetSessionID"> 
     <wsdl:input message="tns:GetSessionIDSoapIN" /> 
     <wsdl:output message="tns:GetSessionIDSoapOUT" /> 
    </wsdl:operation> 
    <wsdl:operation name="CreateAccount"> 
     <wsdl:input message="tns:CreateAccountSoapIN" /> 
     <wsdl:output message="tns:CreateAccountSoapOUT" /> 
    </wsdl:operation> 
    <wsdl:operation name="GetAccountInfo"> 
     <wsdl:input message="tns:GetAccountInfoSoapIN" /> 
     <wsdl:output message="tns:GetAccountInfoSoapOUT" /> 
    </wsdl:operation> 
    <wsdl:operation name="UpdateAccountInfo"> 
     <wsdl:input message="tns:UpdateAccountInfoSoapIN" /> 
     <wsdl:output message="tns:UpdateAccountInfoSoapOUT" /> 
    </wsdl:operation> 
    </wsdl:portType> 

    <wsdl:portType name="VF-HTTP-Binding"> 
    <wsdl:operation name="VoiceSearch"> 
     <wsdl:input message="tns:VoiceSearchSoapIN" /> 
     <wsdl:output message="tns:VoiceSearchSoapOUT" /> 
    </wsdl:operation> 
    <wsdl:operation name="Say"> 
     <wsdl:input message="tns:SaySoapIN" /> 
     <wsdl:output message="tns:SaySoapOUT" /> 
    </wsdl:operation> 
    </wsdl:portType> 


    <!-- Bindings --> 

    <wsdl:binding name="VF-HTTPS-Binding" type="tns:VF-HTTPS-Binding"> 
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc" /> 
    <wsdl:operation name="GetSessionID" soapAction="http://api.voiceforge.com/SOAPI#GetSessionID"> 
     <soap:operation soapAction="https://api.voiceforge.com/SOAPI#GetSessionID" RequestNamespace="https://api.voiceforge.com/SOAPI" ResponseNamespace="https://api.voiceforge.com/SOAPI" style="rpc" /> 
     <wsdl:input> 
     <soap:body use="literal" namespace="https://api.voiceforge.com/SOAPI"/> 
     </wsdl:input> 
     <wsdl:output> 
     <soap:body use="literal" namespace="https://api.voiceforge.com/SOAPI"/> 
     </wsdl:output> 
    </wsdl:operation> 
    <wsdl:operation name="CreateAccount"> 
     <soap:operation soapAction="https://api.voiceforge.com/SOAPI#CreateAccount" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" style="rpc" /> 
     <wsdl:input> 
     <soap:body use="literal" namespace="https://api.voiceforge.com/SOAPI"/> 
     </wsdl:input> 
     <wsdl:output> 
     <soap:body use="literal" namespace="https://api.voiceforge.com/SOAPI"/> 
     </wsdl:output> 
    </wsdl:operation> 
    <wsdl:operation name="GetAccountInfo"> 
     <soap:operation soapAction="https://api.voiceforge.com/SOAPI#GetAccountInfo" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" style="rpc" /> 
     <wsdl:input> 
     <soap:body use="literal" namespace="https://api.voiceforge.com/SOAPI"/> 
     </wsdl:input> 
     <wsdl:output> 
     <soap:body use="literal" namespace="https://api.voiceforge.com/SOAPI"/> 
     </wsdl:output> 
    </wsdl:operation> 
    <wsdl:operation name="UpdateAccountInfo"> 
     <soap:operation soapAction="https://api.voiceforge.com/SOAPI#UpdateAccountInfo" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" style="rpc" /> 
     <wsdl:input> 
     <soap:body use="literal" namespace="https://api.voiceforge.com/SOAPI"/> 
     </wsdl:input> 
     <wsdl:output> 
     <soap:body use="literal" namespace="https://api.voiceforge.com/SOAPI"/> 
     </wsdl:output> 
    </wsdl:operation> 
    </wsdl:binding> 

    <wsdl:binding name="VF-HTTP-Binding" type="tns:VF-HTTP-Binding"> 
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc" /> 
    <wsdl:operation name="VoiceSearch"> 
     <soap:operation soapAction="http://api.voiceforge.com/SOAPI#VoiceSearch" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" style="rpc" /> 
     <wsdl:input> 
     <soap:body use="literal" namespace="http://api.voiceforge.com/SOAPI"/> 
     </wsdl:input> 
     <wsdl:output> 
     <soap:body use="literal" namespace="http://api.voiceforge.com/SOAPI"/> 
     </wsdl:output> 
    </wsdl:operation> 
    <wsdl:operation name="Say"> 
     <soap:operation soapAction="http://api.voiceforge.com/SOAPI#Say" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" style="rpc" /> 
     <wsdl:input> 
     <soap:body use="literal" namespace="http://api.voiceforge.com/SOAPI"/> 
     </wsdl:input> 
     <wsdl:output> 
     <soap:body use="literal" namespace="http://api.voiceforge.com/SOAPI"/> 
     </wsdl:output> 
    </wsdl:operation> 
    </wsdl:binding> 


    <!-- Services --> 

    <wsdl:service name="VoiceForgeAPI-S"> 
    <wsdl:port name="VF-HTTPS" binding="tns:VF-HTTPS-Binding"> 
     <wsdl:documentation>VoiceForge HTTPS Service</wsdl:documentation> 
     <soap:address location="https://api.voiceforge.com/soapi.pl" /> 
    </wsdl:port> 
    </wsdl:service> 

    <wsdl:service name="VoiceForgeAPI-I"> 
    <wsdl:port name="VF-HTTP" binding="tns:VF-HTTP-Binding"> 
     <wsdl:documentation>VoiceForge HTTP Service</wsdl:documentation> 
     <soap:address location="http://api.voiceforge.com/soapi.pl" /> 
    </wsdl:port> 
    </wsdl:service> 

</wsdl:definitions> 

編輯用C#代碼發生器:

// ------------------------------- -------------------------------- wsdl2退房手續:VoiceForgeAPI.cs WSDL/soapi.wsdl Web服務描述語言實用 單框架v2.0.50727.1433

其中有一些警告,而生成代碼:

wsdl/soapi.wsdl 
    - This web reference does not conform to WS-I Basic Profile v1.1 
     R2209: A wsdl:binding in a DESCRIPTION SHOULD bind every wsdl:part of a 
     wsdl:message in the wsdl:portType to which it refers to one of 
     soapbind:body, soapbind:header, soapbind:fault or soapbind:headerfault 
     * Binding 'VF-HTTPS-Binding', in Service Description 
      'http://api.voiceforge.com/SOAPI' 
     * Binding 'VF-HTTP-Binding', in Service Description 
      'http://api.voiceforge.com/SOAPI' 
    - WARNING: At least one operation is of an unsupported type and has been 
    ignored 

Writing file 'VoiceForgeAPI.cs' 
//--------------------------------------------------------------- 

And resulting file, instead of methods having just commented errors like this: 
//--------------------------------------------------------------- 
// WARNING: Could not generate operation binding GetSessionID. The combination of style=rpc with use=literal is not supported 
// WARNING: Could not generate operation binding CreateAccount. The combination of style=rpc with use=literal is not supported 
// WARNING: Could not generate operation binding GetAccountInfo. The combination of style=rpc with use=literal is not supported 
// WARNING: Could not generate operation binding UpdateAccountInfo. The combination of style=rpc with use=literal is not supported 
// WARNING: Could not generate operation binding VoiceSearch. The combination of style=rpc with use=literal is not supported 
// WARNING: Could not generate operation binding Say. The combination of style=rpc with use=literal is not supported 
//--------------------------------------------------------------- 

回答

2

我可以看到這個WSDL已經WebServices的編程非常黑暗時代已經創建...

無論如何,能夠執行:

wsdl2java.bat -all your.wsdl 

需要在線路207更改刪除soapAction="http://api.voiceforge.com/SOAPI#GetSessionID"

<wsdl:operation name="GetSessionID" soapAction="http://api.voiceforge.com/SOAPI#GetSessionID"> 

<wsdl:operation name="GetSessionID"> 

因爲的soapAction規範必須被放置在soap:operation分機(WSDL的SOAP 1.1結合)元件。

發行wsdl2java -all命令給了我這些文件:

ComplexAudioData.java 
ComplexAudioInfo.java 
ComplexCreateUserInfo.java 
ComplexQuery.java 
ComplexQueryResult.java 
ComplexQueryResultArray.java 
ComplexTextInfo.java 
ComplexVoiceInfo.java 
ObjectFactory.java 
package-info.java 
VFHTTPBinding.java 
VFHTTPBindingImpl.java 
VFHTTPBinding_VFHTTP_Client.java 
VFHTTPBinding_VFHTTP_Server.java 
VFHTTPSBinding.java 
VFHTTPSBindingImpl.java 
VFHTTPSBinding_VFHTTPS_Client.java 
VFHTTPSBinding_VFHTTPS_Server.java 
VoiceForgeAPII.java 
VoiceForgeAPIS.java 

com.voiceforge.api.soapi包。

+0

感謝您尋找到這時候我已經失去了所有的希望。我最終只是重寫了它,但希望這將有助於未來的其他人。 – thatidiotguy 2012-06-08 23:43:57

+0

嗯,很抱歉,很晚纔回來,希望得到更多的建議,但很少有人對WSDL文件有很多瞭解。我正在嘗試從wsdl生成一些代碼,並且我收到了問題中現在包含的錯誤。 – thatidiotguy 2012-07-09 16:52:27

+1

對不起,我正在度假兩週。但看起來單聲道(你使用它,是不是?)不支持RPC /文字風格。嘗試Visual Studio和WCF(我認爲它是wsimport.exe)或wsdl.exe。我會在7月23日看到它:) – 2012-07-10 17:52:20