- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个第三方 jar,其中包含带有 @javax.xml.ws.WebServiceClient
注释的 SampleClass 类。我在我的项目中将 CXF 用于 REST 层,而不是用于 Web 服务。但是,由于 CXF 基础设施是为我的项目配置的,因此当我实例化它时,它会尝试自动连接到 SampleClass (事实上,在尝试这样做时它会出现错误)。我想将该类用作简单的 POJO,而不是 Web 服务客户端。有没有办法让 CXF 忽略 @javax.xml.ws.WebServiceClient
注释?
仅供引用,我得到的异常(exception)是:
java.lang.reflect.InvocationTargetException
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.cxf.common.injection.ResourceInjector.invokePostConstruct(ResourceInjector.java:302)
at org.apache.cxf.common.injection.ResourceInjector.construct(ResourceInjector.java:86)
at org.apache.cxf.bus.spring.Jsr250BeanPostProcessor.postProcessAfterInitialization(Jsr250BeanPostProcessor.java:58)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:357)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1308)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:463)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:404)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:375)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:263)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:170)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:260)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:184)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:163)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:430)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:729)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:381)
at org.apache.cxf.bus.spring.BusApplicationContext.<init>(BusApplicationContext.java:88)
at org.apache.cxf.bus.spring.SpringBusFactory.createApplicationContext(SpringBusFactory.java:103)
at org.apache.cxf.bus.spring.SpringBusFactory.createBus(SpringBusFactory.java:94)
at org.apache.cxf.bus.spring.SpringBusFactory.createBus(SpringBusFactory.java:87)
at org.apache.cxf.bus.spring.SpringBusFactory.createBus(SpringBusFactory.java:65)
at org.apache.cxf.bus.spring.SpringBusFactory.createBus(SpringBusFactory.java:54)
at org.apache.cxf.BusFactory.getDefaultBus(BusFactory.java:70)
at org.apache.cxf.BusFactory.getThreadDefaultBus(BusFactory.java:107)
at org.apache.cxf.BusFactory.getThreadDefaultBus(BusFactory.java:98)
at org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:64)
at javax.xml.ws.Service.<init>(Unknown Source)
Caused by: java.lang.NullPointerException
at org.apache.cxf.binding.corba.wsdl.WSDLExtensionRegister.createCompatExtensor(WSDLExtensionRegister.java:63)
at org.apache.cxf.binding.corba.wsdl.WSDLExtensionRegister.registerYokoCompatibleExtensors(WSDLExtensionRegister.java:47)
... 34 more
java.lang.ExceptionInInitializerError
Caused by: java.lang.NullPointerException
at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:81)
at org.apache.cxf.jaxws.ServiceImpl.initializePorts(ServiceImpl.java:141)
at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:133)
at org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:65)
at javax.xml.ws.Service.<init>(Unknown Source)
最佳答案
我们在我们的类中使用了从 Service 扩展而来的 Super()。父“Service”类的代码是
依次调用静态方法“Provider.provider()”来加载运行时的提供者。其代码是
Javadoc对此方法的注释是:
Blockquote
创建一个新的提供者对象。
用于定位要使用的提供者子类的算法包括以下步骤:
Blockquote
CXF 似乎选择了第一种方式来加载其 Provider 实现。 IE: “如果名称为 META-INF/services/javax.xml.ws.spi.Provider 的资源存在,则其第一行(如果存在)用作 UTF-8 编码名称实现类的。”
CXF jar 在 jar 中包含此文件,其中提到 Provider 类作为 CXF 实现。由于这是第一个用于查找的内容,因此将加载 CXF 的提供程序而不是默认提供程序。但是,我们的实现期望加载默认提供程序。
我们能想到的唯一可行的解决方法是在 META-INF\services 下自行添加文件 javax.xml.ws.spi.Provider 并将提供程序指定为默认实现类 com.sun.xml.internal。 ws.spi.ProviderImpl。唯一的风险是 com.sun.xml.internal.ws.spi.ProviderImpl 类是 JRE 的内部实现,并且不受 API 契约的约束。因此,类名/包可能会随着 future 的版本而改变。
关于java - CXF客户端: How to ignore @WebServiceClient annotation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13641248/
我是一名优秀的程序员,十分优秀!