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