2014-03-31 160 views
3

我們正在運行ubuntu 13.04 + Tomcat/7.0.35 + java 1.7.0_51-b00。 安裝程序已成功運行數月。 現在我們增加了一個SOAP端點使用JAX-WS 2.2.8和應用程序的服務器上再也不會部署,說使用Tomcat 7.0.35部署JAXWS的問題

SEVERE: ContainerBase.addChild: start: 
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/v014]] 
     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) 
     at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) 
     at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) 
     at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633) 
     at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:977) 
     at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1655) 
     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
     at java.lang.Thread.run(Thread.java:744) 
Caused by: java.lang.NoSuchMethodError: com.sun.xml.ws.transport.http.servlet.WSServletContextListener.parseAdaptersAndCreateDelegate(Ljavax/servlet/ServletContext;)V 
     at com.sun.xml.ws.transport.http.servlet.WSServletContainerInitializer.onStartup(WSServletContainerInitializer.java:65) 
     at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5280) 
     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
     ... 10 more 

Mar 31, 2014 12:26:43 PM org.apache.catalina.startup.HostConfig deployWAR 
SEVERE: Error deploying web application archive /var/lib/tomcat7/webapps/v014.war 
java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/v014]] 
     at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:904) 
     at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) 
     at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633) 
     at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:977) 
     at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1655) 
     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
     at java.lang.Thread.run(Thread.java:744) 

添加以下Maven依賴使得web應用程序通過月食/ tomcat7本地運行,但不會沒有解決遠程服務器上的問題。

<dependency> 
    <groupId>com.sun.xml.ws</groupId> 
    <artifactId>jaxws-rt</artifactId> 
    <version>2.2.8</version> 
    <exclusions> 
    <exclusion> 
    <groupId>com.sun.xml.stream</groupId> 
    <artifactId>sjsxp</artifactId> 
    </exclusion> 
    </exclusions> 
    </dependency> 

    <dependency> 
    <groupId>com.sun.xml.stream.buffer</groupId> 
    <artifactId>streambuffer</artifactId> 
    <version>1.5.3</version> 
    </dependency> 

    <dependency> 
    <groupId>com.sun.xml.ws</groupId> 
    <artifactId>policy</artifactId> 
    <version>2.3.1</version> 
    </dependency> 

    <dependency> 
    <groupId>org.glassfish.gmbal</groupId> 
    <artifactId>gmbal-api-only</artifactId> 
    <version>3.2.0-b003</version> 
    </dependency> 

    <dependency> 
    <groupId>org.glassfish.ha</groupId> 
    <artifactId>ha-api</artifactId> 
    <version>3.1.9</version> 
    </dependency> 

我們也試圖手動添加罐子

jaxb-impl.jar jaxb-core.jar ha-api.jar gmbal-api-only.jar jaxws-api.jar jaxws-rt.jar management-api.jar policy.jar stax-ex.jar streambuffer.jar 

到Tomcat的lib都和/或沒有影響的web應用程序的WEB-INF文件夾。

也試着一路降級到jax-ws 2.1 - >同樣的錯誤。

幫助或想法真的很感激。

回答

1

@rustyx建議應該如何工作。但我不得不使用OpenJDK的1.7同樣的問題,解決辦法是添加在我的pom.xml

<!-- JAX-WS Dependencies --> 
    <dependency> 
     <groupId>com.sun.xml.ws</groupId> 
     <artifactId>jaxws-rt</artifactId> 
     <version>2.2.8</version> 
     <exclusions> 
      <exclusion> 
       <groupId>com.sun.xml.stream</groupId> 
       <artifactId>sjsxp</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

    <dependency> 
     <groupId>com.sun.xml.stream.buffer</groupId> 
     <artifactId>streambuffer</artifactId> 
     <version>1.5.3</version> 
    </dependency> 

    <dependency> 
     <groupId>com.sun.xml.ws</groupId> 
     <artifactId>policy</artifactId> 
     <version>2.3.1</version> 
    </dependency> 

    <dependency> 
     <groupId>org.glassfish.gmbal</groupId> 
     <artifactId>gmbal-api-only</artifactId> 
     <version>3.2.0-b003</version> 
    </dependency> 

    <dependency> 
     <groupId>org.glassfish.ha</groupId> 
     <artifactId>ha-api</artifactId> 
     <version>3.1.9</version> 
    </dependency> 

希望幫助, 乾杯以下依賴性

1

運行JAX-WS所需的一切已包含在標準的Java 1.7 JVM中。

只包含定製到您的應用程序的JAR。

我建議從捆綁的JAR中刪除與jaxws,jaxb,policy,stax和streambuffer相關的任何內容。

+0

Tomcat不能夠訪問這些罐子在JVM 。 Tomcat只能在JRE上運行。這些罐子在JRE之外。 – DolphinJava

+0

Java SE(Oracle的JRE)包含從版本6開始運行JAX-WS服務所需的一切。[鏈接](http://www.oracle.com/technetwork/articles/javase/jax-ws-2-141894.html) – rustyx

+0

同意。我的評論是不正確的。 JAX-WS可作爲API使用,因此可以直接導入到代碼中。不包括其他罐子是必需的。 – DolphinJava