基于CXF的WebService客戶端Java代碼
用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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!