cxf 本地wsdl_CXF动态调用wsdl接口

1.application.properties文件中配置接口url

2.工具类

package com.vulnverify.core.utils;

import java.io.IOException;

import java.util.Arrays;

import java.util.Properties;

import javax.xml.namespace.QName;

import org.apache.cxf.endpoint.Client;

import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;

import org.apache.cxf.transport.http.HTTPConduit;

import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;

import org.apache.log4j.Logger;

import org.codehaus.jackson.map.ObjectMapper;

import org.springframework.util.StringUtils;

import tns.Application;

import tns.Application_Service;

/**

*

* 使用cxf 调用webservice 接口

*

* @author linan

*

*/

public class CxfInvokeUtil {

static Logger logger = Logger.getLogger(CxfInvokeUtil.class);

private static String wsdlUrl="";

static{

String filePath = null;

try {

filePath = ApplicationUtils

.getWebFileAbsoluteClassPath("application.properties");

} catch (IOException e) {

e.printStackTrace();

}

Properties pro = FileUtil.loadProperties(filePath);

wsdlUrl = pro.getProperty("cxf.url");

logger.info("初始化cxf调用webservice地址为:"+wsdlUrl);

}

/**

*

* 调用webservice 接口

*

* @param method

* 调用方法名

*

* @param params

* 接口传入参数

*

* @return

*

*/

public static synchronized Object[] invoke(String method,Object params) {

Object[] objects = null;

String paramsStr = null;

try {

ObjectMapper om = new ObjectMapper();

JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory

.newInstance();

org.apache.cxf.endpoint.Client client = dcf.createClient(wsdlUrl);

//如果返回的address不是远程服务地址,重新制定地址

client.getEndpoint().getEndpointInfo().setAddress(wsdlUrl);

if (StringUtils.isEmpty(method)) {

logger.error("cxf 调用webservice 执行方法名缺失:method 未传入");

return objects;

}

paramsStr = om.writeValueAsString(params);

logger.info("cxf 调用webservice method:"+method+",参数:" + paramsStr);

HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy(); // 策略

httpClientPolicy.setConnectionTimeout( 36000 ); //连接超时

httpClientPolicy.setAllowChunking( false );

httpClientPolicy.setReceiveTimeout( 10000 ); //接收超时

HTTPConduit http = (HTTPConduit) client.getConduit();

http.setClient(httpClientPolicy);

objects = client.invoke(method, paramsStr);

} catch (Exception e) {

e.printStackTrace();

logger.error("cxf 调用webservice 执行错误:", e);

}

return objects;

}

public static void main(String[] args) throws Exception {

Object[] invoke = CxfInvokeUtil.invoke("get_images", "");

System.out.println(invoke);

}

}

你可能感兴趣的:(cxf,本地wsdl)