Java Webservice实现

Java可以实现Webservice的框架很多比如Axis1、Axis2、CXF等。 我比较倾向于使用CXF比较简单易学,容易与Spring框架集成。开发中需要注意的是客户端与服务端使用不同框架的时候会有一些细节问题,还有就环境变量、路径、方法名修改等的常见问题。

SpringBoot+CXF框架

服务端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* 修改Namespace注解
*/
@WebService(targetNamespace = "http:http://webservice.infotech.vip")
public interface TestService {

// 修改方法名
@WebMethod(operationName = "Test")
public String test(@WebParam(name = "Id") String id);
}


/**
* 配置
*/
@Configuration
public class CxfConfig {

}

客户端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class CxfClient {

// 1.代理类工厂的方式,需要接口类
public static void test1() {
String address = "http://127.0.0.1:8080/soap/test?wsdl";
JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
factoryBean.setAddress(address);
// 设置接口类
jaxWsProxyFactoryBean.setServiceClass(TestService.class);
...
}

// 2.动态调用
public static void test() {
// 创建动态客户端
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient("http://127.0.0.1:8080/soap/test?wsdl");
// 需要密码的情况需要加上用户名和密码
// client.getOutInterceptors().add(new ClientLoginInterceptor(USER_NAME, PASS_WORD));
Object[] objects = new Object[0];
try {
// invoke("方法名",参数1,参数2,参数3....);
objects = client.invoke("test", "123");
System.out.println("返回数据:" + objects);
} catch (java.lang.Exception e) {
e.printStackTrace();
}
}

}

还有一种方式是生成客户端代码的方式。