基于CXF的WebService客戶端Java代碼

hwl0420 8年前發布 | 4K 次閱讀 Java Apache CXF

用CXF框架實現的一個標準的WebService客戶端代碼
</div>

 

PubService.java ~ 2KB         

package com.esb.services.commclient;

import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

import com.esb.services.commservices.ESBServiceSoap;
import com.esb.services.commservices.UserList;
import com.esb.util.EsbServiceUtil;
import com.esb.util.JaxbUtil;

public class PubService {

    public String invokeService() {
        String str = "";
        String serviceURL = "http://localhost:8899/test";
        try {
            JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
            // 這里也可用myeclipse建立Web Service Client,引用對象.class
            factory.getInInterceptors().add(new LoggingInInterceptor());
            factory.getOutInterceptors().add(new LoggingOutInterceptor());
            factory.setServiceClass(ESBServiceSoap.class);
            // 這里指定URL路徑,如果InServiceSoap這個不是一個接口類的話,
            // 下面這句代碼會報錯,提示不是一個接口
            // 在使用java cxf的過程中,一定要使用接口。

            factory.setAddress(serviceURL + "?wsdl");

            // QName函數的兩個參數,第一個是命名空間,第二個是webservice的服務名
            // 第一個參數在.net服務發布時可以找到,也就是targetnamespace,
            // 第二個參數在java的接口實現類中可以找到,也就是serviceName。
            // factory.setServiceName(new
            // QName("http://services.esb.com/commServices/",
            // "ESBServiceSoap"));
            // InServiceSoap是一個接口,由.net web Service Client生成。
            ESBServiceSoap client = (ESBServiceSoap) factory.create();
            // 通過生成的.net web Service Client調用服務的方法publishInformation
            String requestID = "123";
            String sourceSystem = "123";
            String targetSystem = "123";
            String serviceName = "123";
            String serviceOperation = "123";
            String serviceVersion = "123";
            String head = EsbServiceUtil.generateHeaderStr(requestID,
                    sourceSystem, targetSystem, serviceName, serviceOperation,
                    serviceVersion);
            String body = EsbServiceUtil.pottingPayload("123");
            str = client.esbInterfaceService(head, body);
            // 解析result,取出root下面的xml轉換成為字符串
            String context = EsbServiceUtil.analyzeResult1(str);
            // 將字符串轉換成為javabean
            UserList list = JaxbUtil.converyToJavaBean(context, UserList.class);
            // TODO 使用javabean
            client = null;
            factory = null;
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        return str;
    }

    public static void main(String[] args) {
        PubService pubService = new PubService();
        pubService.invokeService();
    }
}

EsbServiceUtil.java ~ 8KB     (3)    

package com.esb.util;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import com.esb.services.commservices.UserList;

public class EsbServiceUtil {

    /**
     * 封裝Result
     */
    public static String pottingResult(String requestId, String errorCode,
            String errorDesc, String context) {
        String str = "";
        context = context == null ? "" : context;
        Document doc = DocumentHelper.createDocument();
        // 增加根節點
        Element root = doc.addElement("root");

        // 增加子元素
        Element ResponseHead = root.addElement("ResponseHead");
        Element RequestId = ResponseHead.addElement("RequestID");
        Element ErrorCode = ResponseHead.addElement("ErrorCode");
        Element ErrorDesc = ResponseHead.addElement("ErrorDesc");
        RequestId.setText(requestId);
        ErrorCode.setText(errorCode);
        ErrorDesc.setText(errorDesc);
        // ---------------------
        Element ResponseBody = root.addElement("ResponseBody");
        // Element element = Element
        Element context_e = JaxbUtil.toElement(context);
        ResponseBody.add(context_e);

        str = root.asXML();
        System.out.println(str);
        return str;
    }

    /**
     * 解析payload
     * 
     * @param objXml
     * @throws Exception
     */
    public static String analyzePayload(String objXml) throws Exception {
        InputStream in = null;
        in = new ByteArrayInputStream(objXml.getBytes("UTF-8"));
        SAXReader reader = new SAXReader();
        Document document = reader.read(in);

        Element root = document.getRootElement();
        System.out.println("Root: " + root.getName());

        // 獲取所有子元素
        List<Element> childList = root.elements();
        System.out.println("total child count: " + childList.size());
        String ss = childList.get(0).asXML();
        // 獲取第一個子元素
        String e1 = ss;
        return e1;

    }

    /**
     * 解析result
     * 
     * @throws Exception
     */
    public static String analyzeResult(String objXml) throws Exception {

        InputStream in = null;
        in = new ByteArrayInputStream(objXml.getBytes("UTF-8"));
        SAXReader reader = new SAXReader();
        Document document = reader.read(in);

        // SAXReader saxReader = new SAXReader();
        // org.dom4j.Document document = saxReader
        // .read(new File("src/NewFile.xml"));
        // 獲取根元素
        Element root = document.getRootElement();
        System.out.println("Root: " + root.getName());
        // 獲取所有子元素
        List<Element> childList = root.elements();
        Element respons = childList.get(0);

        String res = childList.get(0).asXML();
        return res;
    }

    /**
     * 解析result
     * 
     * @throws Exception
     */
    public static String analyzeResult1(String objXml) throws Exception {

        InputStream in = null;
        in = new ByteArrayInputStream(objXml.getBytes("UTF-8"));
        SAXReader reader = new SAXReader();
        Document document = reader.read(in);

        // SAXReader saxReader = new SAXReader();
        // org.dom4j.Document document = saxReader
        // .read(new File("src/NewFile.xml"));
        // 獲取根元素
        Element root = document.getRootElement();
        System.out.println("Root: " + root.getName());

        // 獲取所有子元素
        List<Element> childList = root.elements();
        System.out.println("total child count: " + childList.size());

        // 獲取特定名稱的子元素
        List<Element> childList2 = root.elements("ResponseHead");
        System.out.println("hello child: " + childList2.size());

        Element ResponseHead = root.element("ResponseHead");
        System.out.println(ResponseHead.getName());

        Element RequestId = ResponseHead.element("RequestID");
        System.out.println(RequestId.getTextTrim());

        Element ErrorCode = ResponseHead.element("ErrorCode");
        System.out.println(ErrorCode.getTextTrim());

        Element ErrorDesc = ResponseHead.element("ErrorDesc");
        System.out.println(ErrorDesc.getTextTrim());

        // /////////////////////////
        Element ResponseBody = root.element("ResponseBody");
        System.out.println(ResponseBody.getTextTrim());
        List<Element> bodys = ResponseBody.elements();
        String res = bodys.get(0).asXML();
        return res;
    }

    /**
     * 解析EsbHeader
     * 
     * @param objXml
     * @throws Exception
     */
    public static Map<String, String> analyzeEsbHeader(String objXml)
            throws Exception {
        Map<String, String> map = new HashMap<String, String>();
        InputStream in = null;
        in = new ByteArrayInputStream(objXml.getBytes("UTF-8"));
        SAXReader reader = new SAXReader();
        Document document = reader.read(in);

        // SAXReader saxReader = new SAXReader();
        // org.dom4j.Document document = saxReader
        // .read(new File("src/NewFile.xml"));
        // 獲取根元素
        Element root = document.getRootElement();
        System.out.println("Root: " + root.getName());

        // 獲取所有子元素
        List<Element> childList = root.elements();
        System.out.println("total child count: " + childList.size());

        // 獲取特定名稱的子元素
        // List<Element> childList2 = root.elements("RequestHead");
        // System.out.println("hello child: " + childList2.size());

        // Element RequestHead = root.element("RequestHead");
        // System.out.println(RequestHead.getName());

        Element RequestID = root.element("RequestID");
        if (RequestID != null)
            map.put("RequestID", RequestID.getTextTrim());

        Element SourceSystem = root.element("SourceSystem");
        if (SourceSystem != null)
            map.put("SourceSystem", SourceSystem.getTextTrim());

        Element TargetSystem = root.element("TargetSystem");
        if (TargetSystem != null)
            map.put("TargetSystem", TargetSystem.getTextTrim());

        Element ServiceName = root.element("ServiceName");
        if (ServiceName != null)
            map.put("ServiceName", ServiceName.getTextTrim());

        Element ServiceOperation = root.element("ServiceOperation");
        if (ServiceOperation != null)
            map.put("ServiceOperation", ServiceOperation.getTextTrim());

        Element ServiceVersion = root.element("ServiceVersion");
        if (ServiceVersion != null)
            map.put("ServiceVersion", ServiceVersion.getTextTrim());
        return map;
    }

    /**
     * 封裝esbHeaderStr的內容
     * 
     * @return
     */
    public static String generateHeaderStr(String requestID,
            String sourceSystem, String targetSystem, String serviceName,
            String serviceOperation, String serviceVersion) {
        String str = "";
        Document _document = DocumentHelper.createDocument();
        // Element rootNode = _document.addElement("root");
        Element element = _document.addElement("RequestHead");
        // rootNode.addAttribute("id", "100");
        Element to = element.addElement("RequestID");
        to.addText(requestID);
        Element from = element.addElement("SourceSystem");
        from.addText(sourceSystem);
        Element type = element.addElement("TargetSystem");
        type.addText(targetSystem);
        Element area = element.addElement("ServiceName");
        area.addText(serviceName);
        Element aaaa = element.addElement("ServiceOperation");
        aaaa.addText(serviceOperation);
        Element bbbb = element.addElement("ServiceVersion");
        bbbb.addText(serviceVersion);
        str = element.asXML();
        System.out.println(str);
        return str;
    }

    /**
     * 封裝payload 參數為對象
     */
    public static String pottingPayload(UserList condition) {
        String str = "";
        Document doc = DocumentHelper.createDocument();
        // 增加根節點
        Element RequestBody = doc.addElement("RequestBody");
        // 將對象轉換成為字符串
        String context = JaxbUtil.convertToXml(condition);
        // 將字符串轉換成為xml對象
        Element condition_e = JaxbUtil.strTOElement(context);
        // 將xml對象添加到跟節點里面
        RequestBody.add(condition_e);
        // payload轉換成為字符串
        str = RequestBody.asXML();
        // System.out.println(str);
        return str;
    }

    /**
     * 封裝payload 參數為字符串
     */
    public static String pottingPayload(String condition) {
        String str = "";
        Document doc = DocumentHelper.createDocument();
        // 增加根節點
        Element RequestBody = doc.addElement("RequestBody");
        /********** 有幾個參數就加多這兩行,替換參數名稱 **********/
        Element ee = RequestBody.addElement("字符串參數1");
        ee.setText(condition);
        /********************/
        str = RequestBody.asXML();
        return str;
    }

}

[文件] JaxbUtil.java ~ 2KB         

package com.esb.util;

import java.io.StringReader;
import java.io.StringWriter;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

public class JaxbUtil {  

    public static String convertToXml(Object obj) {  
        return convertToXml(obj, "UTF-8");  
    }  

    public static String convertToXml(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();
            if(result!=null)
                result = result.substring(result.indexOf("?>")+2, result.length());
        } catch (Exception e) {  
            e.printStackTrace();  
        }  

        return result;  
    }  


    @SuppressWarnings("unchecked")  
    public static <T> T converyToJavaBean(String xml, Class<T> 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 Element toElement(String ss) {
        Document doc = null;
        Element element = null;
        try {
            doc = DocumentHelper.parseText(ss);
            element = doc.getRootElement();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }

        return element;
    }

    public static Element strTOElement(String xml) {
        try {
            Document doc = DocumentHelper.parseText(xml);
            return doc.getRootElement();
        } catch (Exception e) {
            return null;
        }
    }
}  
 本文由用戶 hwl0420 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!