2012-09-17 56 views
3

我有一个让我发疯的问题。我在Linux中使用Netbeans开发了一些Web服务,它们工作得很好(使用Tomcat)。我可以用SOAPUI调用服务,一切看起来都不错。 当我构建WAR文件并尝试在Windows上的Tomcat安装中进行部署时,会出现问题。然后,我得到这个:网络服务异常

... 
INFO: WSSERVLET13: JAX-WS context listener destroyed 
Sep 17, 2012 4:28:08 PM com.sun.xml.ws.transport.http.servlet.WSServletContextListener contextInitialized 
INFO: WSSERVLET12: JAX-WS context listener initializing 
Sep 17, 2012 4:28:09 PM com.sun.xml.ws.transport.http.servlet.WSServletContextListener contextInitialized 
SEVERE: WSSERVLET11: failed to parse runtime descriptor: javax.xml.ws.WebServiceException: Unable to create JAXBContext 
javax.xml.ws.WebServiceException: Unable to create JAXBContext 
    at com.sun.xml.ws.model.AbstractSEIModelImpl.createJAXBContext(AbstractSEIModelImpl.java:166) 
    at com.sun.xml.ws.model.AbstractSEIModelImpl.postProcess(AbstractSEIModelImpl.java:94) 
    at com.sun.xml.ws.model.RuntimeModeler.buildRuntimeModel(RuntimeModeler.java:258) 
    at com.sun.xml.ws.server.EndpointFactory.createSEIModel(EndpointFactory.java:338) 
    at com.sun.xml.ws.server.EndpointFactory.createEndpoint(EndpointFactory.java:201) 
    at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:505) 
    at com.sun.xml.ws.transport.http.DeploymentDescriptorParser.parseAdapters(DeploymentDescriptorParser.java:253) 
    at com.sun.xml.ws.transport.http.DeploymentDescriptorParser.parse(DeploymentDescriptorParser.java:147) 
    at com.sun.xml.ws.transport.http.servlet.WSServletContextListener.contextInitialized(WSServletContextListener.java:124) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4791) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5285) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.manager.ManagerServlet.start(ManagerServlet.java:1255) 
    at org.apache.catalina.manager.HTMLManagerServlet.start(HTMLManagerServlet.java:714) 
    at org.apache.catalina.manager.HTMLManagerServlet.doPost(HTMLManagerServlet.java:219) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:641) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.filters.CsrfPreventionFilter.doFilter(CsrfPreventionFilter.java:186) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:581) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: java.security.PrivilegedActionException: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions 
java.lang.StackTraceElement does not have a no-arg default constructor. 
    this problem is related to the following location: 
     at java.lang.StackTraceElement 
     at public java.lang.StackTraceElement[] java.lang.Throwable.getStackTrace() 
     at java.lang.Throwable 
     at public java.lang.Throwable[] my.org.jaxws.MyExceptionBean.suppressed 
     at umy.org.jaxws.MyExceptionBean 

    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.xml.ws.model.AbstractSEIModelImpl.createJAXBContext(AbstractSEIModelImpl.java:153) 
    ... 38 more 
Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions 
java.lang.StackTraceElement does not have a no-arg default constructor. 
    this problem is related to the following location: 
     at java.lang.StackTraceElement 
     at public java.lang.StackTraceElement[] java.lang.Throwable.getStackTrace() 
     at java.lang.Throwable 
     at public java.lang.Throwable[] my.org.jaxws.MyExceptionBean.suppressed 
     at my.org.jaxws.MyExceptionBean 

    at com.sun.xml.bind.v2.runtime.IllegalAnnotationsException$Builder.check(IllegalAnnotationsException.java:102) 
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:472) 
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:302) 
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1140) 
    at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:154) 
    at com.sun.xml.bind.api.JAXBRIContext.newInstance(JAXBRIContext.java:106) 
    at com.sun.xml.ws.developer.JAXBContextFactory$1.createJAXBContext(JAXBContextFactory.java:109) 
    at com.sun.xml.ws.model.AbstractSEIModelImpl$1.run(AbstractSEIModelImpl.java:161) 
    at com.sun.xml.ws.model.AbstractSEIModelImpl$1.run(AbstractSEIModelImpl.java:154) 
    ... 40 more 

所以我想有一个与我在服务引发异常的一个问题:

@WebMethod(...) 
public ..... throws Exception { 
if()... 
else 
    throw new MyException(); // extends java.lang.Exception 
} 

我不明白的第一件事就是为什么这工作得很好,我的Netbeans的Tomcat在Linux上,而不是在我安装的Windows Tomcat中。 我已经查了一些信息:

并查看更多其他网站。我不清楚该怎么做。一些网络建议使用包含@WebFault的“解决方法”,并在类中创建其他方法和虚拟POJO类。我有很多例外,似乎很多工作。有些人建议从classpath中删除一个JAR(我真的没有)。我仍然想知道我的Netbeans Tomcat中有哪些不在我的Windows Tomcat中。我在这方面很新颖。

有没有简单的方法来解决这个问题?非常感谢。

==== ====编辑

正如一些答案的建议,我已经尝试过失败:

@XmlTransient 
    @Override 
    public StackTraceElement[] getStackTrace() { 
     return super.getStackTrace(); 
    } 

    @XmlTransient 
    @Override 
    public Throwable getCause() { 
     return super.getCause(); 
    } 

另外,如果我用@WebFault,我得到另一个异常(这次甚至在Linux上):

SEVERE: WSSERVLET11: failed to parse runtime descriptor: java.lang.NoSuchMethodError: javax.xml.ws.WebFault.messageName()Ljava/lang/String; 
java.lang.NoSuchMethodError: javax.xml.ws.WebFault.messageName()Ljava/lang/String; 
     at com.sun.xml.ws.model.RuntimeModeler.processExceptions(RuntimeModeler.java:1162) 
     at com.sun.xml.ws.model.RuntimeModeler.processDocWrappedMethod(RuntimeModeler.java:898) 
     at com.sun.xml.ws.model.RuntimeModeler.processMethod(RuntimeModeler.java:666) 
     at com.sun.xml.ws.model.RuntimeModeler.processClass(RuntimeModeler.java:420) 
     at com.sun.xml.ws.model.RuntimeModeler.buildRuntimeModel(RuntimeModeler.java:254) 
     at com.sun.xml.ws.server.EndpointFactory.createSEIModel(EndpointFactory.java:338) 
     at com.sun.xml.ws.server.EndpointFactory.createEndpoint(EndpointFactory.java:201) 
     at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:505) 
     at com.sun.xml.ws.transport.http.DeploymentDescriptorParser.parseAdapters(DeploymentDescriptorParser.java:253) 
     at com.sun.xml.ws.transport.http.DeploymentDescriptorParser.parse(DeploymentDescriptorParser.java:147) 
     at com.sun.xml.ws.transport.http.servlet.WSServletContextListener.contextInitialized(WSServletContextListener.java:124) 
     at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4135) 
     at org.apache.catalina.core.StandardContext.start(StandardContext.java:4630) 
     at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) 
     at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) 
     at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546) 
     at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:637) 
     at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:521) 
     at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1359) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:616) 
     at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:297) 
     at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:857) 
     at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:795) 
     at org.apache.catalina.manager.ManagerServlet.check(ManagerServlet.java:1500) 
     at org.apache.catalina.manager.ManagerServlet.deploy(ManagerServlet.java:849) 
     at org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:351) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:199) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:563) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) 
     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
     at java.lang.Thread.run(Thread.java:636) 

我试图实现messageName(),但没有任何工作。 我遵循其他问题的指示,但不起作用。该代码是:

import javax.xml.bind.annotation.XmlAttribute; 
import javax.xml.bind.annotation.XmlType; 

@XmlType(name = "InputMessageValidationFaultType") 
public class FaultBean { 

@XmlAttribute 
    protected String message; 

    public String getMessage(){ 
     return message; 
    } 

    public void setMessage(String message){ 
     this.message = message; 
    } 

} 




import javax.xml.ws.WebFault; 
import javax.xml.bind.annotation.XmlRootElement; 
import javax.xml.bind.annotation.XmlTransient; 


@WebFault(faultBean = "FaultBean") 
public class MyException extends Exception { 

    private static final long serialVersionUID = 1L; 

    private FaultBean faultBean; 

    public MyException(){ 
     super(); 
    } 

    public MyException(String message , FaultBean faultBean , Throwable cause){ 
     super(message, cause); 
     this.faultBean = faultBean; 
    }  

    public MyException(String message, FaultBean faultBean){ 
     super(message); 
     this.faultBean = faultBean; 
    }  

    public FaultBean getFaultInfo() { 
     return faultBean; 
    } 

} 

它仍然是陌生的我,一切工作得很好我的Netbeans/Tomcat的/ Linux和当我移动WAR到Tomcat/Windows无法....

回答

0

我得到了同样的例外。就我而言,解决方案是将Java从1.6升级到1.7。之后,战争文件正常工作。