2011-12-07 15 views
1

Apache CXFフレームワークを使用してEclipseでWebサービスを生成しようとしています。 まず、目的のWebサービスに対応するJavaクラスを作成してから、Webサービス(wsdlファイル)とクライアント用の2つの動的Webプロジェクトを生成します。 Web Webサービスは作成後も正常に機能しますが、しばらくして(1〜3日後)サーバーの起動時にエラーが表示されます。私はプロジェクトからWebサービスを呼び出すしようとすると、Apache CXFフレームワークによるWebサービスの生成中にエラーが発生する

INFO: Starting service Catalina 
Dec 7, 2011 9:27:55 PM org.apache.catalina.core.StandardEngine startInternal 
INFO: Starting Servlet Engine: Apache Tomcat/7.0.4 
Dec 7, 2011 9:27:55 PM org.apache.catalina.loader.WebappClassLoader validateJarFile 
INFO: validateJarFile(C:\Documents and Settings\user\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\Prosys_Doctorat_Servicii_FAS_servicii\WEB-INF\lib\geronimo-servlet_3.0_spec-1.0.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class 
Dec 7, 2011 9:27:59 PM org.apache.catalina.core.StandardContext listenerStart 
SEVERE: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener 
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1672) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1517) 
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:415) 
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:397) 
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:118) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4287) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4816) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:140) 
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1028) 
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:773) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:140) 
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1028) 
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:278) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:140) 
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:429) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:140) 
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:662) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:140) 
    at org.apache.catalina.startup.Catalina.start(Catalina.java:592) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:290) 
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:418) 
Dec 7, 2011 9:27:59 PM org.apache.catalina.core.StandardContext listenerStart 
SEVERE: Skipped installing application listeners due to previous error(s) 
Dec 7, 2011 9:27:59 PM org.apache.catalina.core.StandardContext startInternal 

は、その後、私は次のエラーを取得する:

Exception in thread "main" javax.xml.ws.WebServiceException: org.apache.cxf.service.factory.ServiceConstructionException: Failed to create service. 
    at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:149) 
    at org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:90) 
    at javax.xml.ws.Service.<init>(Unknown Source) 
    at read_variable_value.ReadVariableNodeService1Service.<init>(ReadVariableNodeService1Service.java:50) 
    at FAS.Model2_FAS.asociere_valori(Model2_FAS.java:206) 
    at FAS.Model2_FAS.main(Model2_FAS.java:2596) 
Caused by: org.apache.cxf.service.factory.ServiceConstructionException: Failed to create service. 
    at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:93) 
    at org.apache.cxf.jaxws.ServiceImpl.initializePorts(ServiceImpl.java:203) 
    at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:147) 
    ... 5 more 
Caused by: javax.wsdl.WSDLException: WSDLException: faultCode=PARSER_ERROR: Problem parsing 'http://localhost:8081/Prosys_Doctorat_Servicii_FAS_servicii/services/ReadVariableNodeService1Port?wsdl'.: java.io.FileNotFoundException: http://localhost:8081/Prosys_Doctorat_Servicii_FAS_servicii/services/ReadVariableNodeService1Port?wsdl 
    at com.ibm.wsdl.xml.WSDLReaderImpl.getDocument(Unknown Source) 
    at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source) 
    at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source) 
    at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:239) 
    at org.apache.cxf.wsdl11.WSDLManagerImpl.getDefinition(WSDLManagerImpl.java:186) 
    at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:91) 
    ... 7 more 
Caused by: java.io.FileNotFoundException: http://localhost:8081/Prosys_Doctorat_Servicii_FAS_servicii/services/ReadVariableNodeService1Port?wsdl 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(Unknown Source) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) 
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source) 
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source) 
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source) 
    ... 13 more 

Webサービスは繰り返し使用された後にのみ表示されます。このエラーが発生することがありますか?

http://i.stack.imgur.com/4mTNZ.jpg
http://i.stack.imgur.com/rYkQb.jpg


こんにちは、クライアントは自動的に次のように生成されます。

private static final QName SERVICE_NAME = new QName("http://read_variable/", "ReadVariableNodeServiceService"); 
URL wsdlURL = ReadVariableNodeServiceService.WSDL_LOCATION; 
ReadVariableNodeServiceService ss = new ReadVariableNodeServiceService(wsdlURL, SERVICE_NAME); 
SEIReadValue port = ss.getReadVariableNodeServicePort(); 
     { 
     System.out.println("Invoking getValue..."); 
     java.lang.String _getValue_arg0 = "Alina"; 
     java.lang.String _getValue_arg1 = "WorkspaceS1"; 
     try { 
      double _getValue__return = port.getValue(_getValue_arg0, _getValue_arg1); 
      System.out.println("getValue.result=" + _getValue__return); 
     ................ 

は先週、私は、Webサービスを呼び出すために、以下の方法を推奨しています興味深い文書を発見しました:

ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext(new String[]{"read_variable/client3_beans.xml"}); 
    SEIReadValue port = (SEIReadValue) context.getBean("readvariableClient"); 
{ 
    System.out.println("Invoking getValue..."); 
    java.lang.String _getValue_arg0 = "Alina"; 
    java.lang.String _getValue_arg1 = "WorkspaceS1"; 
    try { 
     double _getValue__return = port.getValue(_getValue_arg0, _getValue_arg1); 
     System.out.println("getValue.result=" + _getValue__return); 
     ......... 

あなたはどう思いますか?これが私のエラーの理由かもしれませんか?


私はほとんど私のエラーの原因を発見したことをとてもうれしく思います。しかし、私はWebサービスの初心者であり、私はあなたのメッセージを完全に理解していません。 私は基本的な/単純なWebサービスのセットを持っていることを指定したいと思うし、これらのWebサービスに基づいて、私は複雑なWebサービスを作成して、その機能を得るために各単純なWebサービスのコンテキスト を取得しました。あなたが言ったように(私が理解したように)これは正しいアプローチではありません。

ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext(new String[]{"write_a_matrix/client2_beans.xml"}); 
SEIWriteMatrix port = (SEIWriteMatrix) context.getBean("write_a_matrix_Client"); 
........................................................... 
ClassPathXmlApplicationContext context_WV=new ClassPathXmlApplicationContext(new String[]{"write_value/client1_beans.xml"}); 
SEIWriteValue port_WV = (SEIWriteValue) context_WV.getBean("write_a_value_Client"); 
........................................................... 

Webサービスクライアントごとにclient_beans xmlファイルを作成しました。大丈夫ですか? Webサービスを呼び出す方法の例と、ただ1つのAppコンテキストを保持する方法を教えてください。

は、私は、我々は(コメントを追加セクションのための)特定の文字数に制限されていることを見てきたので、あなたがはるかに容易に通信したい場合にはあなたに私のメールアドレス< [email protected]>を提供します。

ありがとうございました!

答えて

0

ここで推測:CXFクライアントは、リクエストを1回作成するのではなく、シングルトンとして保持し、その後のリクエストごとにこの1つのインスタンスを使用するのではないでしょうか。

理想的には、Webサービスインターフェイスを使用してクライアントを生成できるはずです。明示的にwsdlを指定した場合、cxfはWSDLに基づいてプロキシを生成しますが、これはあなたのために起こっているようです。たまにwsdlを提供するサービスが失敗し、このエラーが発生します。

あなたが春を使用している場合は、これらの線に沿って何かを行うことができます:

<bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean"> 
    <property name="serviceClass" value="...wsInterface" /> 
    <property name="address" value="serviceURL" /> 
</bean> 

<bean id="client" class="...wsInterface" factory-bean="clientFactory" factory-method="create" /> 
+0

こんにちは は、あなたの答えをいただき、ありがとうございます。 次の方法でWebサービスを生成します。まず、サービス・クラスを作成し、それを右クリックし、「Webサービス」→「Webサービスの作成」をクリックします。そして、私はWSDLとSEIとクライアントを2つの別々のプロジェクトで生成します。 beans.xmlとweb.xmlはサービス動的Webプロジェクトで生成されていますが、クライアントプロジェクトではclient-beans.xmlファイルを見つけることができませんでした。 これがエラーである可能性がありますか? Shoud以下のようにclient-beans.xmlファイルを追加しますか? –

+0

<豆のxmlns = "http://www.springframework.org/schema/beans" ...

+0

、あなたも私を見ることができます。 –

関連する問題