前面曾讲过cxf的webservice搭建,但客户端的代码依赖与服务端。这给我带来了很多不便。因此这里来说下不依赖服务端的客户端搭建。
服务端大致与上讲不变,需要更改处下面会提示。
首先重新搭建客户端,只有一个测试类,Test.java代码如下:
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
public class Test {
public static void main(String str[]) throws Exception {
JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance();
Client client = clientFactory.createClient("http://localhost:8080/WebService/HelloService?wsdl");
Object[] result = client.invoke("sayHello", "lml");
System.out.println(result[0]);
}
}
导入相关jar包,这里我只用到了2个jar,如下图:
运行后可能出现下面错误:
出现这个原因是因为没有使用正确的jre包,在我的java文件夹下有2个文件,使用jdk下的jre文件,注意tomcat与eclipse都需要使用该jre。
当我导完文件后,又出现个新问题,问题如下:
我在下面两个博客上得到提示:http://pangsir.iteye.com/blog/1492508 http://lost-alien.iteye.com/blog/1175859
更改服务端代码,在实现类下加入targetNamespace标签,代码如下:
import javax.jws.WebService;
import com.lml.ws.service.Hello;
@WebService(targetNamespace="http://service.ws.lml.com/",endpointInterface = "com.lml.ws.service.Hello")
public class HelloImpl implements Hello {
public String sayHello(String name) {
return name + " say hello!";
}
}
运行结果,结果正确:
源码下载地址:http://download.csdn.net/detail/l540151663/8039763