鑑於CXF框架的web service學習,傳遞xml,json並解析,容易上手
阿新 • • 發佈:2019-02-10
所依賴的jar包:apache-cxf-2.7.10,可以再官網下載,還有json.rar的對應包,聯絡是一個java 專案
一:下載對應Jar,可以在官網下載,或是到我資源下載,裡面jar都齊全了,將apache-cxf-2.7.10下面的Lib中的jar加入專案中
二:.編寫web services的服務端:需要一個介面,叫做Hello,程式碼如下:在類名稱前加入@WebService註釋
package com; import javax.jws.WebService; import net.sf.json.JSONObject; @WebService public interface Hello { public String sayHello(String str); public JSONObject sayJson(String str); public String sayJsonStr(String str); }
三:編寫介面實現類:包括傳遞的兩種引數,一種是拼接的xml字串,一種是json的物件
package com; import java.util.HashMap; import java.util.Map; import net.sf.json.JSONObject; public class HelloImpl implements Hello { @Override public String sayHello(String str) { System.out.println("web services呼叫成功"); String result = createXml(str); return result; } public static void main(String[] args) throws Exception { JSONObject jsonObj = new JSONObject(); jsonObj.put("name", "liqineng"); String[] likes = new String[] { "music", "movie", "study" }; jsonObj.put("hobby", likes); Map<String, String> ingredients = new HashMap<String, String>(); ingredients.put("age", "23"); ingredients.put("EnglishName", "spider man"); ingredients.put("sex", "boy"); ingredients.put("love", "tangwei"); jsonObj.put("message", ingredients); System.out.println(jsonObj); } /** * 建立JsonOBject物件 * * @param 客戶端傳遞的引數Name * @return 返回jsonObject物件 */ public JSONObject createJsonObject(String name) { JSONObject jsonObj = new JSONObject(); jsonObj.put("name", "liqineng"); String[] likes = new String[] { "music", "movie", "study" }; jsonObj.put("hobby", likes); Map<String, String> ingredients = new HashMap<String, String>(); ingredients.put("age", "23"); ingredients.put("EnglishName", "spider man"); ingredients.put("sex", "boy"); ingredients.put("love", "tangwei"); jsonObj.put("message", ingredients); return jsonObj; } /** * 根據傳遞的字串生成對應的xml。 * * @param 傳遞過來的引數name * @return 返回xml的字串 */ public String createXml(String name) { StringBuffer sb = new StringBuffer(); sb.append("<?xml version='1.0' encoding='UTF-8'?>"); sb.append("<Result>"); sb.append("<cinamaName>機械戰警</cinamaName>"); sb.append("<director>" + name + "</director>"); sb.append("<introduce>一部好萊塢大片,3D觀影,不錯!!!</introduce>"); sb.append("<price>25</price>"); sb.append("</Result>"); return sb.toString(); } @Override public JSONObject sayJson(String str) { return createJsonObject(str); } @Override public String sayJsonStr(String str) { return createJsonObject(str).toString(); } }
四:編寫web services的啟動類,程式碼如下,執行,web services即可查詢了:
package com; import org.apache.cxf.endpoint.Server; import org.apache.cxf.jaxws.JaxWsServerFactoryBean; public class MainServer { public static void main(String[] args) { JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean(); factory.setAddress("http://192.168.10.197:8080/cxf"); factory.setServiceClass(HelloImpl.class); Server server = factory.create(); server.start(); } }
然後可以輸入:http://192.168.10.197:8080/cxf?wsdl 在瀏覽器上進行檢視,你可以可以下載一個soapUi進行專業的測試
第五:編寫Webservice的客戶端:如果不在同一個專案中的話,同樣也需要下載對應的jar包檔案,
需要建立一個介面,介面也是方法,注意:方法也需要新增@WebService註釋,程式碼如下:
package com;
import javax.jws.WebService;
import net.sf.json.JSONObject;
@WebService
public interface Hello {
public String sayHello(String str);
public JSONObject sayJson(String str);
public String sayJsonStr(String str);
}
主的接收和解析類:包括xml解析,json的解析:
package com;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.StringReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import net.sf.json.JSONObject;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
/**
* 客戶端呼叫類。
*
*
*/
public class Client {
public static void main(String[] args) {
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(Hello.class);
factory.setAddress("http://192.168.10.197:8080/cxf?wsdl");
Hello hello = (Hello) factory.create();
String xml = hello.sayHello("zhangsan");
// JSONObject obj = hello.sayJson("liqineng");
// parserXml(xml);
String str = hello.sayJsonStr("liqineng");
ParseJsonStr(str);
// System.out.println(xml);
}
/**
* 解析xml字串
*
* @param str傳遞過來的xml字串
*/
public static void parserXml(String str) {
try {
StringReader read = new StringReader(str);
// 建立新的輸入源SAX 解析器將使用 InputSource 物件來確定如何讀取 XML 輸入
InputSource source = new InputSource(read);
// 建立一個新的SAXBuilder
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse(source);
NodeList movies = document.getChildNodes();
for (int i = 0; i < movies.getLength(); i++) {
Node employee = movies.item(i);
NodeList employeeInfo = employee.getChildNodes();
for (int j = 0; j < employeeInfo.getLength(); j++) {
Node node = employeeInfo.item(j);
if (node.getNodeType() == Node.ELEMENT_NODE) {
if ("cinamaName".equals(node.getNodeName())) {
System.out.println("電影名稱:" + node.getTextContent());
} else if ("introduce".equals(node.getNodeName())) {
System.out.println("電影簡介:" + node.getTextContent());
} else if ("price".equals(node.getNodeName())) {
System.out.println("電影價格:" + node.getTextContent());
} else if ("director".equals(node.getNodeName())) {
System.out.println("導演:" + node.getTextContent());
}
}
}
}
} catch (FileNotFoundException e) {
System.out.println(e.getMessage());
} catch (ParserConfigurationException e) {
System.out.println(e.getMessage());
} catch (SAXException e) {
System.out.println(e.getMessage());
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
public static void ParseJsonObject(JSONObject obj) {
System.out.println(obj);
String name = obj.getString("name");
}
/**
* 解析json字串
*
* @param str傳遞過來的json字串
*/
public static void ParseJsonStr(String str) {
JSONObject obj = JSONObject.fromObject(str);
System.out.println(obj);
String name = obj.getString("name");
String hobby = obj.getString("hobby");
JSONObject message = obj.getJSONObject("message");
String love = message.getString("love");
String sex = message.getString("sex");
int age = message.getInt("age");
String englishName = message.getString("EnglishName");
System.out.println(hobby);
System.out.println(name + ">>" + hobby + ">>" + love + ">>" + sex
+ ">>" + age + ">>" + englishName);
}
}
這樣,一個java的Webservice完成了,並進行的現在比較流行的xml,json的解析,希望大家看了之後對自己有所幫助,如有疑問,留言討論