maven坐标
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
<version>3.2.5</version>
</dependency>
编写服务端接口
@WebService
public interface WebServiceApi {
@WebMethod
// @WebMethod发布的方法,@WebParam:对参数的别名
UserInfo getUserById(@WebParam(name = "senderID") String senderID,
@WebParam(name = "ServiceID")String ServiceID,
@WebParam(name = "EndUser")String[] EndUser,
@WebParam(name = "DataObjectCode")String DataObjectCode,
@WebParam(name = "Condition")String Condition,
@WebParam(name = "Requiredltems")String[] Requiredltems ,
@WebParam(name = "InfoCodeMode")String InfoCodeMode ,
@WebParam(name = "sfzh")String sfzh ,
@WebParam(name = "cxlb")String cxlb
);
`
实现类,如果调用成功,打印传递参数,返回用户对象
@WebService(serviceName = "cfxUserWebService", targetNamespace = "http://api.webservice.example.com/")
@Component
@Log4j2
public class WeServiceImpl implements WebServiceApi{
@Override
public UserInfo getUserById(String senderID, String ServiceID, String[] EndUser, String DataObjectCode, String Condition, String[] Requiredltems, String InfoCodeMode, String sfzh, String cxlb) {
log.info("senderID="+senderID);
log.info("ServiceID="+ServiceID);
log.info("EndUser="+EndUser.toString());
log.info("DataObjectCode="+DataObjectCode);
log.info("Condition="+Condition);
log.info("Requiredltems="+Requiredltems.toString());
log.info("InfoCodeMode="+InfoCodeMode);
log.info("sfzh="+sfzh);
log.info("cxlb="+cxlb);
UserInfo user = new UserInfo();
user.setAge(18);
user.setUsername("孙悟空");
user.setXb("男");
user.setAddress("陕西省西安市");
return user;
}
配置类,发布接口
@Configuration
public class CxfConfig {
/**
* 1.自定义注册一个Servlet<br/>
* 如果不自定义注册,则默认的匹配url是services,详见下方摘录的官文描述<br/>
* 2.也可以在properties或yml文件中修改该路径,如cxf.path=/webservice,详见下方摘录的官文描述
* 注意:beanName不能为dispatcherServlet
* @return
*/
@Bean(name = "cxfServlet")
public ServletRegistrationBean cxfServlet() {
return new ServletRegistrationBean(new CXFServlet(), "/webservice/*");
}
@Autowired
private Bus bus;
@Autowired
private com.example.webservice.api.WebServiceApi WebServiceApi;
// 配置CXF服务发布,默认服务是在host:port/services/发布地址
@Bean
public Endpoint userWebService() {
EndpointImpl endpoint = new EndpointImpl(bus, WebServiceApi);
endpoint.publish("/userWebService");
return endpoint;
}
}
启动 访问 http://localhost:8080/webservice/userWebService?wsdl若访问成功则服务端接口发布成功。
## 客户端
/**
* 单/多参调用工具类(Object类型)
*
* @param cxfUrl url地址
* @param method 调用方法名
* @param obj 发送报文体
* @return res 返回结果
* @throws Exception 若有异常,在控制台输出异常,并将异常抛出
*/
public static String cxfClientSingleParam(String cxfUrl, String method, Object... obj) {
String res = null;
// 创建动态客户端
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient(cxfUrl);
// 需要密码的情况需要加上用户名和密码
// client.getOutInterceptors().add(new ClientLoginInterceptor(USER_NAME, PASS_WORD));
Object[] objects = new Object[0];
try {
// 基本格式:invoke("方法名",参数1,参数2,参数3....);
objects = client.invoke(method, obj);
System.out.println("返回数据:" + objects[0].toString());
res= JSONObject.toJSONString(objects[0]);
} catch (java.lang.Exception e) {
e.printStackTrace();
}
return res;
}
测试代码
/**
* 测试
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
String cxfUrl = "http://127.0.0.1:8080/webservice/userWebService?wsdl";
String method = "getUserById";
//参数
String senderID = "1";
String ServiceID = "2";
List EndUser = null;
String DataObjectCode = "";
//查询字段拼接
JSONObject jsonObject = new JSONObject();
jsonObject.put("tjxh", "1");
String[] strings = {"610322199301132330"};
jsonObject.put("value", strings);
String Condition = jsonObject.toJSONString();
List Requiredltems = null;
String InfoCodeMode = "0000";
String sfzh = "610322199301132330";
String cxlb = "1";
//调用服务
CxfClient.cxfClientSingleParam(cxfUrl, method, senderID,ServiceID,EndUser,DataObjectCode,Condition,
Requiredltems,InfoCodeMode,sfzh,cxlb
);
}
返回执行结果以及日志输出