1

既存の (動作中の) Web サービスを呼び出す GWT アプリケーションを開発しようとしています。私は使っている:

      - JAX-WS RI 2.1.6 in JDK 6
      - JDK 6
      - Glassfish V3
      - Eclipse 20110615-0604

3 つのコンポーネント アプリケーションを個別にテストしたところ、正常に動作しました。

1. GWT application - browser invoking GWT server side code. This is based on the GWT sample, http://code.google.com/webtoolkit/gettingstarted.html#create
2. Java application that uses JAX-WS proxy to invoke a Web Service. This is based on a JAX-WS hello world sample. I used wsimport on my wsdl to generate the proxy code.
3. Pre-existing Web Service, which I have the WSDL for.

上位 2 つのコードをマージして、GWT サーバー側コード内から Web サービスを呼び出す GWT アプリケーションを作成すると、マージされたアプリケーションが以下の例外で失敗します。標準の GWT の依存関係と標準の JAX-WS の依存関係の間でクラスの競合が発生していると思われます。

次の例外が発生します。

javax.servlet.ServletContext ログ: 着信 RPC 呼び出しのディスパッチ中に例外が発生しました.lang.String) throws java.lang.IllegalArgumentException' が予期しない例外をスローしました: javax.xml.stream.FactoryFinder$ConfigurationError: プロバイダー com.ctc.wstx.stax.WstxInputFactory が com.google.gwt.user.server で見つかりません。 com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:588) で rpc.RPC.encodeResponseForFailure(RPC.java:385) com.google.gwt.user.server.rpc.RemoteServiceServlet で。 com.google.gwt.user.server.rpc の processCall(RemoteServiceServlet.java:208)。com.google.gwt.user.server.rpc の RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)。AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) で javax.servlet.http.HttpServlet.service(HttpServlet.java:637) で javax.servlet.http.HttpServlet.service(HttpServlet.java:717) で org.mortbay.jetty .servlet.ServletHolder.handle(ServletHolder.java:511) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter) .java:35) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) で com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:58) でorg.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) com.google.apphosting.utils.servlet.TransactionCleanupFilter.org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) の doFilter(TransactionCleanupFilter.java:43) com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:122) の doFilter(TransactionCleanupFilter.java:43) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) で com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97) で org.mortbay.jetty.servlet .ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) ) org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) で org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) で com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:70) で org.mortbay.jetty.handler .HandlerWrapper.handle(HandlerWrapper.java:152) at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:351) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java) :152) org.mortbay.jetty.Server.handle(Server.java:326) で org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) で org.mortbay.jetty.HttpConnection$RequestHandler.content( HttpConnection.java:938) org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755) org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218) org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)原因: javax.xml.stream.FactoryFinder$ConfigurationError: プロバイダー com.ctc.wstx.stax.WstxInputFactory が javax.xml.stream.FactoryFinder.newInstance(FactoryFinder.java:154) で javax.xml.stream.FactoryFinder で見つかりませんcom.sun.xml の javax.xml.stream.XMLInputFactory.newInstance(XMLInputFactory.java:123) の javax.xml.stream.FactoryFinder.find(FactoryFinder.java:233) の .findJarServiceProvider(FactoryFinder.java:308)。 com.sun.xml.internal.ws.api.streaming.XMLStreamReaderFactory.(XMLStreamReaderFactory.java:67) com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.createReader(RuntimeWSDLParser.java:794) com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.resolveWSDL(RuntimeWSDLParser.java: 251) com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:118) で com.sun.xml.internal.ws.client.WSServiceDelegate.parseWSDL(WSServiceDelegate.java:254) でcom.sun.xml.internal.ws.client.WSServiceDelegate.(WSServiceDelegate.java:217) com.sun.xml.internal.ws.client.WSServiceDelegate.(WSServiceDelegate.java:165) com.sun.xml .internal.ws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:93) at javax.xml.ws.Service.(Service.java:56) at amx.devenvironment.helloworld1.JavaHelloComponent100201106212354ServiceHelloWorldPTHelloWorldPT.(JavaHelloComponent100201106212354ServiceHelloWorldPTHelloWorldPT.java:46) で sample.HelloWorldGetResponse.getResponse(HelloWorldGetResponse.java:16) で com.mjg.training.server.GreetingServiceImpl.greetServer(GreetingServiceImpl.java:46) で sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブ メソッド) ) com の java.lang.reflect.Method.invoke(Method.java:597) の sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) .google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:100) at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:569)GreetingServiceImpl.greetServer(GreetingServiceImpl.java:46) の sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブ メソッド) の sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) の sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 25) java.lang.reflect.Method.invoke(Method.java:597) で com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:100) で com.google.gwt .user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:569)GreetingServiceImpl.greetServer(GreetingServiceImpl.java:46) の sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブ メソッド) の sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) の sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 25) java.lang.reflect.Method.invoke(Method.java:597) で com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:100) で com.google.gwt .user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:569)com.google.gwt.user.server.rpc.RPC の com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:100) の Method.invoke(Method.java:597)。 invokeAndEncodeResponse(RPC.java:569)com.google.gwt.user.server.rpc.RPC の com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:100) の Method.invoke(Method.java:597)。 invokeAndEncodeResponse(RPC.java:569)

以前、この例外が発生していました:

[ERROR] javax.servlet.ServletContext log: Exception while dispatching incoming RPC call com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract java.lang.String com.mjg.training.client.GreetingService.greetServer(java.lang.String) throws java.lang.IllegalArgumentException' threw an unexpected exception: javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found
    at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:385)
    at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:588)

次の行をコードに追加することで解決しました。

System.setProperty("javax.xml.transform.TransformerFactory","com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl");

最初の例外について、他の同様の回避策はありますか。

ありがとう、マット。

4

0 に答える 0