您的位置:首页 > 编程语言 > Java开发

6.当形参,返回值类型不是JavaBean式的复合类,Map时,CXF无法处理:服务端发布

2012-07-23 10:47 477 查看
/**
*
*/
package lee;

import javax.xml.ws.Endpoint;

import org.fkjava.cfx.ws.HelloWorld;
import org.fkjava.cfx.ws.impl.HelloWorldWs;

/**
* @author Kevin
* 发布Web Services
*/
public class ServerMain {

/**
* 发布Web Services
* @param args
*/
public static void main(String[] args) {
// Web Servers的对象
HelloWorld helloWorld = new HelloWorldWs();
// 发布Web Services
// 第一个参数指定Web Services的地址,并指定它的名字
// 第二个参数指定服务的提供者,即Web Servers的对象
Endpoint.publish("http://192.168.1.2:9999/HelloWorld", helloWorld);
System.out.println("HelloWorld Web Serviecs暴露成功!");
}

}


会报如下错误,因为CFX没法自动处理Map数据格式,需要程序员写转换器

2012-7-23 8:57:06 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass

信息: Creating Service {http://impl.ws.cfx.fkjava.org/}HelloWorldWs from class org.fkjava.cfx.ws.HelloWorld

Exception in thread "main" javax.xml.ws.WebServiceException: org.apache.cxf.service.factory.ServiceConstructionException

at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:275)

at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:209)

at org.apache.cxf.jaxws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:84)

at javax.xml.ws.Endpoint.publish(Endpoint.java:170)

at lee.ServerMain.main(ServerMain.java:27)

Caused by: org.apache.cxf.service.factory.ServiceConstructionException

at org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:281)

at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromClass(ReflectionServiceFactoryBean.java:376)

at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.buildServiceFromClass(JaxWsServiceFactoryBean.java:523)

at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:439)

at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:195)

at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:163)

at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:100)

at org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:117)

at org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.java:167)

at org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:346)

at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:259)

... 4 more

Caused by: com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 2 counts of IllegalAnnotationExceptions

java.util.Map is an interface, and JAXB can't handle interfaces.

this problem is related to the following location:

at java.util.Map

at private java.util.Map org.fkjava.cfx.ws.jaxws_asm.GetAllCatsResponse._return

at org.fkjava.cfx.ws.jaxws_asm.GetAllCatsResponse

java.util.Map does not have a no-arg default constructor.

this problem is related to the following location:

at java.util.Map

at private java.util.Map org.fkjava.cfx.ws.jaxws_asm.GetAllCatsResponse._return

at org.fkjava.cfx.ws.jaxws_asm.GetAllCatsResponse

at com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException$Builder.check(IllegalAnnotationsException.java:91)

at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:436)

at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:277)

at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1100)

at com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:143)

at com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:110)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:202)

at javax.xml.bind.ContextFinder.find(ContextFinder.java:376)

at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:574)

at org.apache.cxf.jaxb.JAXBDataBinding.createJAXBContextAndSchemas(JAXBDataBinding.java:444)

at org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:264)

... 14 more
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐