下面的方法可用,jar包在底下
使用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了。