2016-08-08 9 views
0

私は自分のプロジェクトでApache CXFを使用しようとしています。だから、私はこのコードを入れてxmlファイルcxf-client.xml設定:設定Apache CXF

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:http-conf="http://cxf.apache.org/transports/http/configuration" 
    xsi:schemaLocation="http://cxf.apache.org/transports /http/configuration 
     http://cxf.apache.org/schemas/configuration/http-conf.xsd 
     http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans.xsd"> 

     <import resource="classpath:META-INF/cxf/cxf.xml" /> 
     <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /> 
     <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> 

     <http-conf:conduit name="*.http-conduit"> 
     <http-conf:client ConnectionTimeout="3000" ReceiveTimeout="3000"/> 
     </http-conf:conduit> 
</beans> 

を私の質問は、どのように、どこで私が正しく私のプロジェクトを実行するために、このファイルを読むことができるのですか?私はより多くの設定が必要ですか?ここ

は私のクライアントクラスのjavaのです:ここ

@WebServiceClient(name = "name", 
       wsdlLocation = "sourse?wsdl", 
       targetNamespace = "myNameSpace") 
public class MyClass extends Service { 

public final static URL WSDL_LOCATION; 

public final static QName SERVICE = new QName("myNameSpace", "name"); 
public final static QName MyEndpointServiceImplPort = new QName("myNameSpace", "MyEndpointServiceImplPort"); 
static { 
    URL url = null; 
    try { 
     String urlString = System.getProperty("webservice.trainmission.url"); 
     url = new URL(urlString); 
    } catch (MalformedURLException e) { 
     e.getMessage(); 
    } 
    WSDL_LOCATION = url; 
} 

public MyClass(URL wsdlLocation, QName serviceName) {  
    super(wsdlLocation, serviceName); 
} 
@WebEndpoint(name = "MyEndpointServiceImplPort") 
public MyEndpointServicePortType getMyEndpointServiceImplPort() { 
    return super.getPort(MyEndpointServiceImplPort, MyEndpointServicePortType.class); 
} 

は私web.xmlです:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com /xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 
<display-name>MyProject</display-name> 
<context-param> 
    <param-name>contextConfigLocation</param-name> 
<param-value> 
     classpath:conf/cxf-client.xml 
</param-value> 
</context-param> 
<servlet> 
    <description>Apache CXF Endpoint</description> 
    <display-name>cxf</display-name> 
    <servlet-name>cxf</servlet-name> 
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet- class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>cxf</servlet-name> 
    <url-pattern>/services/*</url-pattern> 
</servlet-mapping> 

<listener> 
    <display-name>Spring Web Context Loader Listener</display-name> 
    <listener-class>org.springframework.web.context.ContextLoaderListener 
    </listener-class> 
</listener> 
</web-app> 

私はそれがこのラインsuper(wsdlLocation, serviceName);でブロックされ、それが使用していないMyClassのインスタンスを作成するときにタイムアウトが発生しました

+0

を参照してください。私はあなたのプロジェクトでそれを使用する方法を知っている春についてのチュートリアルを読むことをお勧めします – pedrofb

+0

あなたの答えに感謝!私はクラスパスとして 'web.xml'でこのクラスを呼び出しました。あなたは私がより多くの設定が必要なのか、それとも良いのか考えていますか? – josef

+0

ContextLoaderListenerを設定する必要があります。これを確認してくださいhttp://stackoverflow.com/questions/6451377/loading-context-in-spring-using-web-xml – pedrofb

答えて

0

コンストラクタがwsdlLocaltioからWSDLをダウンロードしようとすると、サービスがブロックされているようですn。 CXFタイムアウトはここでは適用されません。 wsdlLocationのURLがアクセス可能であることを確認してください。そうでない場合

1)ローカルのwsdlファイルをポイントします。

File wsdlFile = new File(wsdl); 
wsdlLocation = wsdlFile.toURI().toURL(); 

2)設定は、CXFのWebサービスWDSLなし

これは `spring`設定ファイルであるhttps://stackoverflow.com/a/19827446/6371459

QName qname = new QName("http://thenamespace", "FooService"); 
FooService service = new FooService(null, qname); // null for ignore WSDL 
Foo port = service.getFooPort(); 
BindingProvider bindingProvider = (BindingProvider) port; 
bindingProvider.getRequestContext() 
    .put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, 
    "http://foo.com/soap/fooBean"); 
+0

あなたの答えをありがとう!実際には、私はあなたが回答でそれを見ることができるような単純な解決策を見つける – josef

+0

最後に、あなたは 'BindingProvider'を使ってエンドポイントアドレスを設定しましたか? – pedrofb

+0

申し訳ありませんが、私は私の答えを投稿できません!私は何が問題なのか分からない!しかし、私は単純なソリューションを使用して教えてください。 URLConenctionです。私は私のサービスに電話する前に、私のURLを制御するためにこのソリューションを使用しました。 { URL testUrl = new URL(MyURL); URLConnection testConnection = testUrl.openConnection(); testConnection.setConnectTimeout(TIMEOUT_VALUE); testConnection.setReadTimeout(TIMEOUT_VALUE); } catch(SocketTimeoutExceptionException){ System.out.println( "以上" + TIMEOUT_VALUE + "経過しました。"); } – josef

関連する問題