Webservice的服务端用JDK1.6+自带的Webservice做的,客户端用的是XFire的webservice调用的,但是传过来的参数为NULL.
XFire的调用方式是:
String wsdl = "http://192.168.1.112:8088/testService?wsdl";
try {
Client client = new Client(new URL(wsdl));
String result = client.invoke("test", new Object[]{"hello"});
} catch (MainformedURLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
服务端的代码如:
接口:
public interface ITest {
public String test(String str);
}
实现类:
@WebService(name="test", serviceName = "test")
@SOAPBinding(stype = SOAPBinding.Style.RPC)
public class TestImpl implements ITest {
@Override
public String test(String str) {
System.out.println(str);
}
}
解决办法:
在服务端的实现类上加上:@SOAPBinding(stype = SOAPBinding.Style.RPC) ,如果不写的情况下默认的类型是Document,至于RPC和Document的区别大家可以参考其他Webservice资料,不过两种类型各有优点和缺点。
代码变成:
@WebService(name="test", serviceName = "test")
@SOAPBinding(stype = SOAPBinding.Style.RPC)
public class TestImpl implements ITest {
@Override
public String test(String str) {
System.out.println(str);
}
}
JDK1.6+自带的Webservice非常强大,而且不用我们额外引入jar包,而且应该将来会越来越强大,所以推荐大家使用。