【JAVA】 CXF 动态请求wsdl接口
原文:https://blog.csdn.net/weixin_41884770/article/details/124032794
在cxf动态请求时,有需要BASIC 用户密码登录的情况,需要使用BUS来对用户名和密码进行处理,如果不需要进行BASIC认证,则去掉BUS部分即可.
import com.alibaba.fastjson.JSON;
import org.apache.cxf.Bus;
import org.apache.cxf.BusFactory;
import org.apache.cxf.configuration.security.AuthorizationPolicy;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import org.apache.cxf.transport.http.HTTPConduitConfigurer;
import org.apache.cxf.transport.http.auth.DefaultBasicAuthSupplier;
import org.apache.cxf.transport.http.auth.HttpAuthSupplier;
/**
* 请求wsdl 地址 并获取返回参数
* @param userName 用户名
* @param password 密码
* @param wsdlUrl 请求路径
* @param requestMethods 请求方法
* @param port 如果需要区分http 请求和 https请求 则需要提供这个参数
* @param data 请求数据
* @return 返回数据
*/
public static String requestWsdlInterface(String userName, String password,String wsdlUrl,String requestMethods,QName port,Object data) {
Bus bus = BusFactory.getThreadDefaultBus();
bus.setExtension((name, address, httpConduit) -> {
final AuthorizationPolicy authorization = new AuthorizationPolicy();
authorization.setUserName(userName);
authorization.setPassword(password);
httpConduit.setAuthorization(authorization);
final HttpAuthSupplier supplier = new DefaultBasicAuthSupplier();
httpConduit.setAuthSupplier(supplier);
}, HTTPConduitConfigurer.class);
JaxWsDynamicClientFactory factory = JaxWsDynamicClientFactory.newInstance(bus);
Client client = null;
if(port!=null){
client = factory.createClient( wsdlUrl, null,port);
}else{
client = factory.createClient(wsdlUrl);
}
String response = "";
try {
//得到对象所封装的值
Object objects = client.invoke(requestMethods, data);
response = JSON.toJSONString(objects);
} catch (Exception e) {
e.printStackTrace();
}
return response;
}

浙公网安备 33010602011771号