栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Java

CXF动态webservice客户端调用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

CXF动态webservice客户端调用

项目中 需要调东华提供的webservice,调webservice需要加密,静态调用需要生成一堆代码,我们项目只用其中几个接口,实现体检预约等,所以选了CXF动态客户端调用webservice的方式.核心代码如下:

TJWebServiceClient.java
 public static String callWebService(String methodname, String requestCode, String quesXml){

        JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
        Client client = dcf
                .createClient("http://10.xx.xx.xx/dthealth/web/DHCPE.Service.NetComService.cls?wsdl=1&CacheUserName=dhuser&CachePassword=dhpassword&CacheNoRedirect=1");
        // url为调用webService的wsdl地址
        // 需要密码的情况需要加上用户名和密码
//         client.getOutInterceptors().add(new ClientLoginInterceptor("dhuser","dhuser"));
        Map props = new HashMap();
        props.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);
        //密码类型 明文:PasswordText密文:PasswordDigest
        props.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);
        //用户名
        props.put(WSHandlerConstants.USER, "dhwebservice");
        //将PasswordHandler 的类名传递给服务器,相当于传递了密码给服务器
        props.put(WSHandlerConstants.PW_CALLBACK_CLASS, PasswordHandler.class.getName());
        WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(props);
        client.getOutInterceptors().add(wssOut);
        // paramvalue为参数值:nb ,即是该方法需要提供的参数
        Object[] objects;
        try {


            objects = client.invoke(methodname, requestCode,quesXml);
            String objStr = objects[0].toString();
//            System.out.println(objStr);

            return objStr;
        } catch (Exception e) {
            e.printStackTrace();
        }

        return "";
    }
    public static  T getWSResponseResult(String methodname,String requestCode,Object obj,Class c) throws Exception {

        if(StringUtils.isBlank(methodname))
        {//默认新方法
            methodname = "RequestSubmitNew";
        }
        String requestXml = JaxbUtil.bean2Xml(obj,obj.getClass());

//        System.out.println(requestCode + " 请求报文:" + requestXml);
        String res = callWebService(methodname,requestCode,requestXml);

        T t = JaxbUtil.xml2Object(res,c);

        return t;
    }
PasswordHandler.java
public class PasswordHandler implements CallbackHandler {

    @Override
    public void handle(javax.security.auth.callback.Callback[] callbacks) {
        for (int i = 0; i < callbacks.length; i++) {
            WSPasswordCallback pc = (WSPasswordCallback)callbacks[i];
            pc.setPassword("dhpass");
        }
    }
}

调用:

    @Override
    public PackagesLevelResponseVo getPackagesLevelInfo(PackagesLevelRequestVo quesVo) {
        try {

            PackagesLevelResponseVo rsVo = TJWebServiceClient.getWSResponseResult("RequestSubmitNew", RequestCodeEnum.REQUEST_HS10201.key,quesVo,PackagesLevelResponseVo.class);
            return rsVo;

        }catch (Exception ex)
        {
            ex.printStackTrace();
        }
       return null;
    }

JaxUtil.java

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.*;
import java.nio.charset.Charset;
import java.util.Map;


public class JaxbUtil {


    
    public static String converTomXml(Object obj) {
        return converToXml(obj,"UTF-8");

    }
    
    private static String converToXml(Object obj, String encoding) {
        String result = null;
        try {
            JAXBContext context = JAXBContext.newInstance(obj.getClass());
            Marshaller marshaller = context.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,true);
            marshaller.setProperty(Marshaller.JAXB_ENCODING,encoding);
            StringWriter writer = new StringWriter();
            marshaller.marshal(obj,writer);
            result =writer.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }


    
    @SuppressWarnings("unchecked")
    public static T converyToJavaBean(String xml,Class c){
        T t = null;
        try {
            JAXBContext context = JAXBContext.newInstance(c);
            Unmarshaller unmarshaller = context.createUnmarshaller();
            t = (T)unmarshaller.unmarshal(new StringReader(xml));
        } catch (Exception e) {
            e.printStackTrace();
        }

        return t;

    }


    
    public static String multilayerMapToXml(Map map, boolean isCDATA) throws UnsupportedEncodingException{
        String parentName = "response";
        Document doc = DocumentHelper.createDocument();
        doc.addElement(parentName);
        String xml = recursionMapToXml(doc.getRootElement(), parentName, map, isCDATA);
        return formatXML(xml);
    }

    
    @SuppressWarnings("unchecked")
    private static String recursionMapToXml(Element element, String parentName, Map map, boolean isCDATA) {
        Element xmlElement = element.addElement(parentName);
        map.keySet().forEach(key -> {
            Object obj = map.get(key);
            if (obj instanceof Map) {
                recursionMapToXml(xmlElement, key, (Map)obj, isCDATA);
            } else {
                String value = obj == null ? "" : obj.toString();
                if (isCDATA) {
                    xmlElement.addElement(key).addCDATA(value);
                } else {
                    xmlElement.addElement(key).addText(value);
                }
            }
        });
        return xmlElement.asXML();
    }

    
    public static String formatXML(String xml) {
        String requestXML = null;
        try {
            // 拿取解析器
            SAXReader reader = new SAXReader();
            Document document = reader.read(new StringReader(xml));
            if (null != document) {
                StringWriter stringWriter = new StringWriter();
                // 格式化,每一级前的空格
                OutputFormat format = new OutputFormat("    ", true);
                // xml声明与内容是否添加空行
                format.setNewLineAfterDeclaration(false);
                // 是否设置xml声明头部
                format.setSuppressDeclaration(false);
                // 是否分行
                format.setNewlines(true);
                XMLWriter writer = new XMLWriter(stringWriter, format);
                writer.write(document);
                writer.flush();
                writer.close();
                requestXML = stringWriter.getBuffer().toString();
            }
            return requestXML;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }


    
    public static T xml2Object(String xmlStr, Class c)
    {
        try
        {
            JAXBContext context = JAXBContext.newInstance(c);
            Unmarshaller unmarshaller = context.createUnmarshaller();

            T t = (T) unmarshaller.unmarshal(new InputStreamReader(
                    new ByteArrayInputStream(xmlStr.getBytes()), Charset.forName("UTF-8")));

            return t;

        } catch (JAXBException e) {  e.printStackTrace();  return null; }

    }

    
    public static String bean2Xml(Object obj, Class model) throws Exception {

        JAXBContext jaxbContext = JAXBContext.newInstance(model);

        Marshaller marshaller = jaxbContext.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); // 设置编码字符集
//        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); // 格式化XML输出,有分行和缩进
        marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
//		marshaller.setProperty("com.sun.xml.bind.xmlHeaders",
//				"");
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        marshaller.marshal(obj, baos);
        String xmlObj = new String(baos.toByteArray(),"UTF-8"); // 生成

        return xmlObj;

    }

    
//    public static String json2Xml(String json){
//        String xml = "";
//        try {
//            org.json.JSONObject json1 = new org.json.JSONObject(json);
//            xml += XML.toString(json1);
//            xml += "";
//        }catch (Exception ex){
//            ex.getStackTrace();
//        }
//        return xml;
//
//    }

}

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1039977.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号