2010-11-22 17 views
7

現在Springの設定ファイルなしでCXFを使用しているWebサービスクライアントで作業しています。CXF Springを使用しないでCXFポートでSoapVersionを設定する方法

これはかなりうまくいきますが、Java Apiを使用してバインディングSoapVersionを設定する方法を理解できません。 これは、次のように行われる春のファイルを使用する:(...ポートで、SOAPBinding上)

<jaxws:binding> 
    <soap:soapBinding version="1.2"/> 
</jaxws:binding> 

を君たちは、Javaコードでこれを行う方法を知っていますか?

ご協力いただきありがとうございます。

EDIT ----------------------

私はまだこの問題にこだわって... 私はSOAPBindingアノテーションを追加しようとしました以下のレスポンスの1つで示唆されているようにインターフェイス上にありますが、動作しませんでした。 Soap 1.2を使用するためにポートタイプ/バインディング/バスを手動で設定する方法を探しています...

Anyアイデア?

編集----------------------

問題が解決しました。実際に私自身の質問に答えました。下記を参照してください。

ありがとう!

答えて

13

私は解決策を共有するために私自身の質問に再度答えます。 CXFメーリングリストのメンバーの助けを借りて、私にとってうまくいくソリューションを見つけました。 実際に問題を解決するには2つの方法があります。 ここに説明があります:

問題は私のCXFサービスを構築していた方法から来ました。

最初のソリューションは、サービスの作成時にWSDLの場所を指定することです:

// Create the service 
Service service = Service.create(urlToWsdl, serviceQName); 
// Access the port 
return service.getPort(serviceQName, portTypeClass); 

これは、問題を解決しますが、私は、WSDLにそのリンクを持っている必要はありませんでしたので、ここではその第二の溶液があります

// Create the service 
Service service = Service.create(serviceQName); 
// Add a Port to the service and specify the SOAP 1.2 binding 
service.addPort(serviceQName, javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING, wsUrl); 
// Access the port 
return service.getPort(serviceQName, portTypeClass); 

私のプロジェクトでは、2番目のソリューションを選択することにしました。

希望すると便利です。

+0

cxfを使ってどうすればいいですか?私はこのようなサービスを作成しています 'Object implementor = new DiscoveryLookupPortImpl(); Endpoint.publish( "udp://239.255.255.250:3702"、implementor); '' public class DiscoveryLookupPortImplはDiscoveryLookupPort'を実装しています – 4ntoine

6

簡単なだけでのインターフェイス上で注釈を固執するだろうです:私は自分の質問に答えるドナル・フェローズによって示唆されるように

@BindingType(SOAPBinding.SOAP12HTTP_BINDING) 
+0

回答ありがとうございますが、私はインターフェイスにアクセスできません。 – reef

+0

@reef:インターフェイスの説明はどうなっていますか? –

+0

@Donal Fellowsこれはwsdl2javaツールの実行結果です。これは基本的に私のプロジェクトの依存関係の1つです。 – reef

0

;)

実際に問題がSOAPバージョンにリンクされましたサーバーが処理できます。 クライアント側では、Soap 1.2を使用することを指定する必要はありません.SOAP 1.2に構成されたWSDLファイルのPortTypeを持つことで十分です。 しかし、サーバー側では、私が明示的にどのSoapバージョンが必要かを伝える必要があります。すべての人々だ

<jaxws:binding> 
    <soap:soapBinding version="1.2"/> 
</jaxws:binding> 

:私はまだCXF構成のために、「春モード」を使用して、サーバー側で は、このように私は、XML設定ファイルに次を追加しました! あなたの時間と助けてくれてありがとう!

EDIT --------------------------------

実はこのソリューションは、今、我々は動作しません。私たちが管理していないサーバーに連絡してください....私たちはまだここに私たちの問題に悩まされています....

+1

私はクライアント側とサーバー側の両方にアクセスできるので、このソリューションはうまくいきました。これで、管理していないサーバーに接続する必要があるので、これは機能しません。あなたはSpringの設定なしでSOAPバージョンを設定する方法を知っていますか? – reef

0

古いスレッド。私は私のために働く解決策を投稿すると思った。 cxf-beans.xmlファイルでendpointName="tns:MR_ServerSoap12"endpointName="tns:MR_ServerSoap"に変更しました。エンドポイント名はwsdlに独自の名前を持つことに注意してください。その名前を使用します。

1

cxfクライアントを使用している場合は、次のように使用できます。また、複数のwsdlをバインドすることもできます。

JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); 
factory.setServiceClass(WebServiceClass); 
     BindingConfiguration config = new BindingConfiguration() { 

    @Override 
    public String getBindingId() { 
      // TODO Auto-generated method stub 
      return "http://www.w3.org/2003/05/soap/bindings/HTTP/";//SOAPVersion.SOAP_12.httpBindingId 
    } 
    }; 
    factory.setBindingConfig(config); 
関連する問題