使用jboss-4.2.2.GA,在调用remote web service时抛org.jboss.ws.WSException: Cannot obtain java type mapping for: {......}sayHello
使用EJB3发布WebService很简单,只要使用@WebService 和 @WebMethod 注释就行了。
@WebService
public @Stateless class HelloBean implements Hello {
@WebMethod
public String sayHello(String name) {
return "Hello " + name;
}
}
启动JBoss 通过 http://localhost:8080/myproject/HelloBean?wsdl 查看wsdl
client 代码如下
public static void callSayHello() {
String wsdl = "http://localhost:8080/myproject/HelloBean?wsdl";
try {
URL url = new URL(wsdl);
String namespace = "http://bean.web......./";
QName qname = new QName(namespace, "HelloBeanService");
QName port = new QName(namespace, "HelloBeanPort");
QName operation = new QName(namespace, "sayHello");
ServiceFactory factory = ServiceFactory.newInstance();
Service service = factory.createService(url, qname);
Call call = service.createCall(port, operation);
System.out.println(call.invoke(new Object[]{"Andy"}));
} catch (Exception e) {
e.printStackTrace();
}
}
运行报错 org.jboss.ws.WSException: Cannot obtain java type mapping for: {......}sayHello
同样的client代码,使用一个简单的 main函数却可以运行。
google之,找到一点有用的 http://www.mail-archive.com/jboss-user@lists.jboss.org/msg13433.html
把JBoss里的jboss-jaxrpc.jar都删掉,从axis中复制axis.jar jaxrpc.jar commons-discovery-0.2.jar 到JBoss里,再运行原来的代码,就OK了。
参考
JBoss4 Guide 12.3. Web Services Clients
http://docs.jboss.org/jbossas/jboss4guide/r2/html/ch12.html#ch12.ws4ee-view.fig
注释类型 WebService
http://gceclub.sun.com.cn/Java_Docs/jdk6/docs/zh/api/javax/jws/WebService.html