2011-06-16 12 views
1

軸からcxfに移行しようとしていますが、プラグインがjavaコードに生成するwsdlファイルがあります。軸からcxfへの移行

  1. 私は、WSDLファイルに次のブロックを持っている:

    <xsd:element name="sendSms" type="parlayx_sms_send_local_xsd:sendSms"/> 
        <xsd:complexType name="sendSms"> 
        <xsd:sequence> 
         <xsd:element maxOccurs="unbounded" minOccurs="1" name="addresses" type="xsd:anyURI"/> 
         <xsd:element maxOccurs="1" minOccurs="0" name="senderName" type="xsd:string"/> 
         <xsd:element name="message" type="xsd:string"/> 
         <xsd:element maxOccurs="1" minOccurs="0" name="receiptRequest" type="parlayx_common_xsd:SimpleReference"/> 
        </xsd:sequence> 
        </xsd:complexType> 
    

    とanyURIのは、文字列の代わりに、URIに生成され、誰もがなぜ知っている私は2つの質問がありますか?

  2. 軸は、ユーザー名、パスワード、タイムアウトなどのWebサービス属性を追加できるサービス・ロケータ・クラスとバインディング・スタブ・クラスを作成します。サービスは保護された接続であり、 Webサービスのパラメータではなく、sendSmsメソッドを生成しました。 (あなたは以下の定義を見ることができます)。

    <wsdl:portType name="SendSms"> 
        <wsdl:operation name="sendSms"> 
        <wsdl:input message="parlayx_sms_send:SendSms_sendSmsRequest"/> 
        <wsdl:output message="parlayx_sms_send:SendSms_sendSmsResponse"/> 
        <wsdl:fault message="parlayx_common_faults:ServiceException" name="ServiceException"/> 
        <wsdl:fault message="parlayx_common_faults:PolicyException" name="PolicyException"/> 
        </wsdl:operation> 
    </wsdl:portType> 
    
    <xsd:element name="sendSms" type="parlayx_sms_send_local_xsd:sendSms"/> 
        <xsd:complexType name="sendSms"> 
        <xsd:sequence> 
         <xsd:element maxOccurs="unbounded" minOccurs="1" name="addresses" type="xsd:anyURI"/> 
         <xsd:element maxOccurs="1" minOccurs="0" name="senderName" type="xsd:string"/> 
         <xsd:element name="message" type="xsd:string"/> 
         <xsd:element maxOccurs="1" minOccurs="0" name="receiptRequest" type="parlayx_common_xsd:SimpleReference"/> 
        </xsd:sequence> 
        </xsd:complexType> 
    

    私はそれが私がこれらの値を追加する方法を示しています確信している任意の例を見つけることができませんでした。 あなたはそのような例について知っていますか?

おかげで、 ダニエラあなたの最初の質問について

答えて

0

は、CXFはXMLとオブジェクトの間の変換を行うためにJAXB(デフォルト)を使用し、それはanyURIStringにマッピングされていることを指定します。無効なURIに対してチェック例外を使用する場合は、new URI(str)を使用して変換を自分で行う必要があります。チェックされていない例外を使用する場合は、URI.create(str)を使用します。あなたのためにそれを処理するカスタムコンバータを登録することができますが、それはあなた自身で行うよりもはるかに複雑であるようです。 URI引数あたり1行の余分なコード行があります(チェック例外ルートを使用している場合は、おそらく形式的に優れています)。あなたの2番目の質問に

、キーはCXF(またはその他のJAX-WS準拠のクライアント側)によって生成されたクライアントスタブがjavax.xml.ws.BindingProviderインターフェイスを実装するということです。彼らはconfigured at the conduit levelだCXFのように

// Use the right things from your tooling here... 
SendSMS serviceInstance = new SMSSender().getSendSMSImplPort(); 

Map<String, Object> requestContext = 
     ((BindingProvider) serviceInstance).getRequestContext(); 
requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, serviceAddress); 
requestContext.put(BindingProvider.USERNAME_PROPERTY, username); 
requestContext.put(BindingProvider.PASSWORD_PROPERTY, password); 
// And so on for all the properties you want to configure 

タイムアウトは、少し異なっている:これは、このようなビットをコーディングにつながります。そのスレッドの関連する部分は、(cxf.xmlファイル内に属している)、このスニペットをのようだ:

<http:conduit name="http://131.107.153.205/.*"> 
    <http:client ConnectionTimeout="0" ReceiveTimeout="0"/> 
</http:conduit> 

私はあなたがあなたの要件(特に導管に適応するためにそれを変更したいかを正確に知っていません名);これは私が今までのところデフォルトを正直にしていたところです。 (あなたはset it at the code levelにできるかもしれません - コメントを見てください - それは私には特に明白ではありません)上記の2つのタイムアウトはタイムアウトを全く持たないようにそのコードによって設定されていることにも注意してください。それはおそらく生産コードでは望んでいないでしょう...

+0

感謝を指定する、wsdl2javaにオプション-b与えるです。 2番目の答えに関して、私はどのようにバインディングインターフェイスを見つけることができるのかよく分かりません。私は定義されたメソッドとSendSmsServiceを持つインターフェースSendSmsを持っており、そこからgetSendSmsを実行してインターフェースを受け取ることができます。 – Daniela

0

はい、CXFは、XMLとオブジェクト間の変換を行うためにJAXBを使用し、anyURIがStringにマップされることを指定します。ただし、JavaタイプとSOAPタイプの間のバインドを変更することは可能です。ここで使用されるようにこれを取るためにxs:anyURI

<?xml version="1.0" encoding="UTF-8"?> 
<jaxb:bindings version="2.0" 
       xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
       xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

     <jaxb:globalBindings 
      xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
      <jaxb:javaType name="java.net.URI" xmlType="xs:anyURI" 
       parseMethod="create" printMethod="toASCIIString" /> 
     </jaxb:globalBindings> 
</jaxb:bindings> 

java.net.URIにマップするJAXBのバインディングファイルは、JAXWSまたはJAXBバインディングファイル

wsdl2java -b type-bindings.xml ...