情景描述:在我的webservice服务中,要调用远程写好的一个服务;由于我的后台是用CXF方式开发的,所以调用远程的方式采用的是由wsdl生成本地代理接口来实现的,生成本地接口的代码如下:
F:\jar包驱动\apache-cxf-2.6.0\bin>wsdl2java -p com.dyc.client -d d:/ws -verbose http://localhost:7000/gisplatform/SpatialAnalysisService?wsdl
然后将生成的在ws目录下的源文件COPY到我的工程中调用,报下面错误
信息: Creating Service {http://www.sgcc.com.cn/sggis/service/gisservice}SpatialAnalysisServiceService from class cn.creaway.webgis.proxy.SpatialAnalysisService
Exception in thread "main" org.apache.cxf.service.factory.ServiceConstructionException
at org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:297)
at org.apache.cxf.service.factory.AbstractServiceFactoryBean.initializeDataBindings(AbstractServiceFactoryBean.java:86)
at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromClass(ReflectionServiceFactoryBean.java:474)
at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.buildServiceFromClass(JaxWsServiceFactoryBean.java:685)
at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:536)
at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:248)
at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:205)
at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:101)
at org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:90)
at org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryBean.java:155)
at org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBean.java:156)
at cn.creaway.webgis.business.SpatialAnalysisServiceBusiness.computeUserLineLengthStatisticByDept(SpatialAnalysisServiceBusiness.java:71)
at cn.creaway.webgis.business.SpatialAnalysisServiceBusiness.main(SpatialAnalysisServiceBusiness.java:85)
Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 3 counts of IllegalAnnotationExceptions
两个类具有相同的 XML 类型名称 "{http://www.sgcc.com.cn/sggis/service/gisservice}computePSRStatisticByDept"。请使用 @XmlType.name 和 @XmlType.namespace 为类分配不同的名称。
this problem is related to the following location:
at cn.creaway.webgis.proxy.jaxws_asm.ComputePSRStatisticByDept
this problem is related to the following location:
at cn.creaway.webgis.proxy.ComputePSRStatisticByDept
at public cn.creaway.webgis.proxy.ComputePSRStatisticByDept cn.creaway.webgis.proxy.ObjectFactory.createComputePSRStatisticByDept()
at cn.creaway.webgis.proxy.ObjectFactory
两个类具有相同的 XML 类型名称 "{http://www.sgcc.com.cn/sggis/service/gisservice}computeLineLengthStatisticByDeptResponse"。请使用 @XmlType.name 和 @XmlType.namespace 为类分配不同的名称。
this problem is related to the following location:
at cn.creaway.webgis.proxy.jaxws_asm.ComputeLineLengthStatisticByDeptResponse
this problem is related to the following location:
at cn.creaway.webgis.proxy.ComputeLineLengthStatisticByDeptResponse
at public cn.creaway.webgis.proxy.ComputeLineLengthStatisticByDeptResponse cn.creaway.webgis.proxy.ObjectFactory.createComputeLineLengthStatisticByDeptResponse()
at cn.creaway.webgis.proxy.ObjectFactory
两个类具有相同的 XML 类型名称 "{http://www.sgcc.com.cn/sggis/service/gisservice}computePSRStatisticByDeptResponse"。请使用 @XmlType.name 和 @XmlType.namespace 为类分配不同的名称。
this problem is related to the following location:
at cn.creaway.webgis.proxy.jaxws_asm.ComputePSRStatisticByDeptResponse
this problem is related to the following location:
at cn.creaway.webgis.proxy.ComputePSRStatisticByDeptResponse
at public cn.creaway.webgis.proxy.ComputePSRStatisticByDeptResponse cn.creaway.webgis.proxy.ObjectFactory.createComputePSRStatisticByDeptResponse()
at cn.creaway.webgis.proxy.ObjectFactory
.......................................
开始一直怀疑是因为我项目中的服务名与我调用的服务名之间有冲突,根据异常信息很容易让人如此思考;后来无意中打开一个接口文发现,原理我COPY到工程中时,包的路径改变了,而原接口引用的类路径却还是我生成时用的目录,如下:
......................................................
@ResponseWrapper(localName = "computePSRStatisticByDeptResponse", targetNamespace = "http://www.sgcc.com.cn/sggis/service/gisservice", className = "com.dyc.client.ComputePSRStatisticByDeptResponse")
public java.lang.String computePSRStatisticByDept(
@WebParam(name = "InputXML", targetNamespace = "") java.lang.String inputXML);
.......................................................
可以发现我的className一直引用的是我原来的包名,而我现在的包名是cn.gary.test
修改方法,改接口显然不实际,所以重新生成接口,修改命令为:
F:\jar包驱动\apache-cxf-2.6.0\bin>wsdl2java -p cn.gary.test -d d:/ws -verbose http://localhost:7000/gisplatform/SpatialAnalysisService?wsdl
再将生成的接口COPY到相同的接口下,就不会再报错了。
总结:同样的异常也有可能别的原因引起的,这里只是其中一种可能.
分享到:
相关推荐
<import resource="classpath:META-INF/cxf/cxf.xml"/> <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/> <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
利用Apache CXF开发webservice接口需要用到的jar集合 cxf-core-3.0.15.jar cxf-rt-bindings-soap-3.0.15.jar cxf-rt-bindings-xml-3.0.15.jar cxf-rt-databinding-jaxb-3.0.15.jar cxf-rt-frontend-jaxws-3.0.15.jar...
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet <load-on-startup>1 <servlet-name>CXFServlet</servlet-name> <url-pattern>/services/* ``` 最后,测试Web Service。可以通过CXF的WS-*或...
Apache CXF是一个开源的Java框架,它主要用于构建和开发Web服务。这个框架允许开发者通过SOAP、RESTful HTTP、XML以及各种协议来实现服务接口。在本案例中,我们讨论的是"apache-cxf-3.4.3.tar.gz",这是Apache CXF ...
org.apache.cxf.spring.remoting.Jsr181HandlerMapping.jar
CXF提供了`org.apache.cxf.jaxrs.ext.multipart.MultipartProvider`类,它可以解析Multipart请求并将文件内容转化为可操作的对象。 3. **处理文件上传**: 在服务端的实现类中,我们可以读取`InputStream`或`Part`...
标签“**cxf.jar**”是CXF库的一般术语,通常用来代表整个CXF框架的JAR文件,无论具体版本如何。在实际使用中,开发者可能会将CXF的核心库与其他必要的依赖项一起打包,以便于部署和使用。 在“**cxf-2.7.18及其...
webservice CXF 报错:java.lang.NoClassDefFoundError: org/apache/neethi/builders/AssertionBuilder 需要用到此jar文件 通过apache官网可获得。 文件位置\apache-cxf-2.7.13\lib
CXF的WSDL模块处理WSDL文档,用于生成服务端代码和服务描述,以及客户端的代理类。 9. **xmlschema-core-2.2.4.jar**: 这个库提供了XML Schema的解析和处理功能,对于验证XML文档是否符合指定的XML Schema定义至关...
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet <load-on-startup>1 <servlet-name>CXF</servlet-name> <url-pattern>/services/* ``` - **实现 Web 服务**:编写 Java 类实现 Web 服务接口,...
Apache CXF是一个开源的Web服务框架,主要用于构建和开发服务导向架构(SOA)中的Web服务。这个"apache-cxf-2.1.4.tar.zip webservice"文件包含了一个特定版本(2.1.4)的CXF框架,用于创建和消费Web服务。让我们...
例如,这里有一个名为`CxfService`的类,它实现了`CxfServiceImpl`接口,并提供了`getSay`方法,该方法返回当前时间和接收到的名称。 ```java @WebService public class CxfService implements CxfServiceImpl { @...
cxf-2.1.jar cxf-2.1.jar cxf-2.1.jar cxf-2.1.jar
Apache CXF是一个开源的Java框架,它主要用于构建和开发Web服务。这个"apache-cxf-2.7.7.zip"压缩包包含了CXF框架的2.7.7版本,这是一个在2013年发布的稳定版本。CXF是Apache软件基金会的项目,它集成了多种Web服务...
这样,当你在编写如`cxf.xml`或`spring-context.xml`这样的配置文件时,IDE就能识别出CXF的特定标签,并提供相应的代码提示。 例如,一个简单的CXF JAX-RS配置可能会如下所示: ```xml <beans xmlns="http://www....
4. **配置文件**:如cxf.xml,用于配置CXF的行为和设置。 要开始使用Apache CXF 2.0.10,开发者需要解压此压缩包,将库文件添加到项目中,然后根据自己的需求配置CXF并编写相应的服务或客户端代码。需要注意的是,...
Apache CXF是一个开源的Java框架,它主要用于构建和开发服务导向架构(SOA)和Web服务。这个"apache-cxf-2.6.0.tar.gz"文件是一个压缩包,包含了Apache CXF 2.6.0版本的所有源代码、库文件、文档和其他资源。这个...
- 例如,添加`<cxf:property key="org.apache.cxf.logging.FrontendLoggerClass" value="org.apache.cxf.common.logging.Slf4jLogger"/>`将CXF的日志输出切换到SLF4J。 4. **自定义日志拦截器**: - 如果需要更细...
CXF(CXF: Composite ...总的来说,"cxf的jar包"是一套完整的Web服务开发和运行环境,为开发者提供了强大且灵活的工具,以实现各种Web服务场景。无论是构建SOAP服务,还是构建RESTful API,CXF都能提供全面的支持。