2017-09-05 8 views
0

ソープWebサービスとクライアントがあります。 Apache CXF/Springバンドルを使用します。
クライアント:SOAPクライアントでHttp応答コードを取得するにはどうすればいいですか?

public class MyWebServiceClientFactoryCXF { 
    public MyWebServiceAPI getMyWebServiceClient(String URI, String username, String password) throws MalformedURLException { 
     JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); 
     factory.setServiceClass(MyWebServiceAPI.class); 
     factory.setAddress(URI); 
     factory.setUsername(username); 
     factory.setPassword(password); 
     factory.setDataBinding(new AegisDatabinding()); 
     return (MyWebServiceAPI) factory.create(); 
    } 
} 

Springコンテキスト:

<bean id="myWebServiceClientFactory" class="mypakg.MyWebServiceClientFactoryCXF"/> 
<bean id="myWebServiceClient" factory-bean="myWebServiceClientFactory" factory-method="getMyWebServiceClient"> 
     <constructor-arg index="0" type="java.lang.String" value="${ws.url}"/> 
     <constructor-arg index="1" type="java.lang.String" value="${ws.login}"/> 
     <constructor-arg index="2" type="java.lang.String" value="${ws.pwd}"/> 
</bean> 

用途:

public class App { 
    @Autowired 
    private MyWebServiceAPI wsClient; 

    public void someMethod() { 
     wsClient.getSomeInfo(); 
     // Need to know http response code from `wsClient.getSomeInfo()` 
    } 
} 

は、どのように私は石鹸のWebサービスからの応答コードを入手できますか? JaxWsProxyFactoryBeanのインターセプターを指定できますが、インターセプターの値をApp.someMethod()メソッドに渡すにはどうすればよいですか?

答えて

1

は、次のコードを考えてみましょう:

import org.apache.cxf.message.Message; 
import org.apache.cxf.frontend.ClientProxy; 
import org.apache.cxf.endpoint.Client; 


    public void someMethod() { 
     try { 
      wsClient.getSomeInfo(); //exception here for non-2xx http status by default 
     } finally { 
      Client client = ClientProxy.getClient(wsClient); 
      Integer responseCode = client.getResponseContext().get(Message.RESPONSE_CODE); 
     } 

も参照してください:

ClientProxy javadoc

Client javadoc

関連する問題