java - 无法绑定(bind)到 Web 服务 : java. lang.StackTraceElement 没有无参数默认构造函数

标签 java spring jax-ws

我正在尝试绑定(bind)到在 JBoss 服务器上托管的测试环境中运行的现有旧版 Web 服务,但由于以下异常,Spring 无法创建该 bean:

Caused by: javax.xml.ws.WebServiceException: Unable to create JAXBContext
    at com.sun.xml.internal.ws.model.AbstractSEIModelImpl.createJAXBContext(AbstractSEIModelImpl.java:153)
    at com.sun.xml.internal.ws.model.AbstractSEIModelImpl.postProcess(AbstractSEIModelImpl.java:83)
    at com.sun.xml.internal.ws.model.RuntimeModeler.buildRuntimeModel(RuntimeModeler.java:244)
    at com.sun.xml.internal.ws.client.WSServiceDelegate.createSEIPortInfo(WSServiceDelegate.java:687)
    at com.sun.xml.internal.ws.client.WSServiceDelegate.addSEI(WSServiceDelegate.java:675)
    at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:330)
    at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:313)
    at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:295)
    at javax.xml.ws.Service.getPort(Service.java:92)
    at org.springframework.remoting.jaxws.JaxWsPortClientInterceptor.getPortStub(JaxWsPortClientInterceptor.java:413)
    at org.springframework.remoting.jaxws.JaxWsPortClientInterceptor.prepare(JaxWsPortClientInterceptor.java:337)
    at org.springframework.remoting.jaxws.JaxWsPortClientInterceptor.afterPropertiesSet(JaxWsPortClientInterceptor.java:316)
    at org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean.afterPropertiesSet(JaxWsPortProxyFactoryBean.java:42)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)
    ... 38 more
Caused by: java.security.PrivilegedActionException: com.sun.xml.internal.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 java.lang.Exception
        at uk.co.example.UserException
        at public javax.xml.bind.JAXBElement uk.co.example.ObjectFactory.createUserException(uk.co.example.UserException)
        at uk.co.example.ObjectFactory

    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.xml.internal.ws.model.AbstractSEIModelImpl.createJAXBContext(AbstractSEIModelImpl.java:140)

我通过 Spring xml 绑定(bind)到 Web 服务:

<bean id="auth1" class="org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean">
    <property name="serviceInterface" value="uk.co.example.Authentication" />
    <property name="wsdlDocumentUrl" value="http://testdomain.co.uk:30001/services/authentication?wsdl" />
    <property name="namespaceUri" value="http://example.co.uk/" />
    <property name="serviceName" value="AuthenticationWebServiceService" />
    <property name="portName" value="AuthenticationPort" />
    <property name="maintainSession" value="true" />
</bean>

我的 UserException 只是扩展了 java.lang.Exception:

public class UserException extends Exception
{

}

所以我的 Web 服务包含一个声明 UserException 抛出的方法。 UserException 扩展了 java.lang.Exception,其中包含对 StackTraceElement 的引用,而 StackTraceElement 没有无参数构造函数。因此 JAXB 异常(exception)。我从其他一些关于此事的帖子中了解到了这些。

我不明白的是:为什么这个特定的网络服务和这个特定的异常类?当然,我该如何纠正这个问题?

我的 Web 服务抛出了许多其他异常(大多数似乎扩展了 java.lang.Exception)。在同一 JBoss 服务器中运行的另一个 Web 服务(不会抛出 UserException,但会抛出其他定制的 Exception 子类)工作正常。 2 组不同的 Web 服务具有不同的客户端 jar。

我只是创建了一个 Eclipse Maven 项目,引入了 Spring 测试和 Web jar (v3.1.0)、junit 和 log4j。 2 个客户端 jar(作为旧版构建的一部分预先存在)也在类路径上。我创建了一个 Junit,它将代理 bean Autowiring 为身份验证接口(interface),并在其上调用authenticateUser() 方法。

因为它是遗留代码,所以我无法更改正在运行的 Web 服务或生成的客户端 jar 中的任何内容。

有什么建议吗?

我承认,在涉及 Web 服务以及如何构建和部署我们的遗留代码方面,我还是个新手,所以不要害怕询问任何您认为可能太明显的问题!

最佳答案

如果您无法更改客户端或服务器代码,您仍然可以编写自己的客户端来扩展现有客户端并尝试add a custom JAXB binding那里。

关于java - 无法绑定(bind)到 Web 服务 : java. lang.StackTraceElement 没有无参数默认构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14243159/

相关文章:

java - 从文本文件中设置随机行

java - 即使设置了serialVersionUID,反序列化也会引发InvalidClassException

java - 为 dbcp2 设置 spring bean 配置给出 "PoolableConnectionFactory not linked to pool. Calling setPool()"

Spring 批输出力 CRLF 作为行分隔符

spring - 如何在 Spring Data Rest 应用程序中注册 Converter

java - Web服务客户端: Use plain-text xml instead of object hierarchy

java - JAXB异常 : not a valid property on class

java - 如何在没有克隆开销的情况下获得集合/映射的固定状态迭代器

java - 由于异常 : XML reader error: WstxUnexpectedCharException: Unexpected character '[' ,JAX-WS 错误无法创建 SOAP 消息

java - 使用 JPA 连接不区分大小写的 PK 和 FK 表