1、使用jkd自带方式开发(javax.xml.ws包)
1、编写接口
@WebService
public interface IHelloService {
public int getAge();
public String getName();
}
2、编写实现类
@WebService
public class HelloService implements IHelloService {
@Override
public int getAge() {
return 18;
}
@Override
public String getName() {
return "lisr";
}
3、 发布
public class ServiceTest {
public static void main(String[] args) {
String address = "http://localhost:8001/webservice/helloService";
Endpoint.publish(address,new HelloService());
System.out.println("publish success !");
}
}
这里就发布成功了,课以访问 http://localhost:8001/webservice/helloService?wsdl进行验证
也可以用客户端调用检测:
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import webservice_service.inte.IHelloService;
/**
* Created by 828470 on 2016/7/21.
*/
public class TestClient {
public static void main(String[] args) {
JaxWsProxyFactoryBean soapFactoryBean = new JaxWsProxyFactoryBean();
soapFactoryBean.setAddress("http://localhost:8001/webservice/helloService?wsdl");
soapFactoryBean.setServiceClass(IHelloService.class);
IHelloService hello = (IHelloService)soapFactoryBean.create();
System.out.println(hello.getName());
}
}
这里使用了cxf实现,调用时问题比较多主要是包不全,还有一些问题再次罗列一下:
1、cxf运行需要的jar包,把cxf所有包都导进去
2、地址后面加上?wsdl
另外注意:
如果返回方法如下
@WebService
public interface IHelloService {
int getAge();
String getName();
Map<String,Car> getCars();
}
当返回方法含有Map等javabean不包含的数据类型时,
通过cxf调用时,不会报错。
但是使用
wsimport -keep http://localhost:8001/webservice/helloService?wsdl
生成客户端调用就会出错,我的是生成客户端就和服务器端不一致
必须得处理map格式,这里请参考XmlAdapter使用