基于CXF的webService本地数据交互PC端与Android端3.docx
《基于CXF的webService本地数据交互PC端与Android端3.docx》由会员分享,可在线阅读,更多相关《基于CXF的webService本地数据交互PC端与Android端3.docx(17页珍藏版)》请在冰点文库上搜索。
基于CXF的webService本地数据交互PC端与Android端3
本篇基于
(二)的基础上续写
主要是JSON的数据交互。
1.项目结构图。
2.POM.XML maven中导进需要的包 新增代码(注意这里没有给全,只是给出这篇需要的)
Java代码
1.
-- =============JSon====================== -->
2.
-- =========这个我包下不下来 手动导入吧============== -->
3.
-- -->
4.
-- net.sf.json-lib -->
5.
-- json-lib -->
6.
-- 2.3 -->
7.
-- -->
8.
9. commons-collections
10. commons-collections
11. 20040616
12.
13.
14. commons-lang
15. commons-lang
16. 20030203.000129
17.
18.
19. commons-beanutils
20. commons-beanutils
21. 20030211.134440
22.
23.
24. net.sf.ezmorph
25. ezmorph
26. 1.0.6
27.
28.
29. xom
30. xom
31. 1.2.5
32.
33.
34. commons-httpclient
35. commons-httpclient
36. 20020423
37.
38.
39. net.sf.morph
40. morph
41. 1.1.1
42.
3.IHelloWorld 新增代码
Java代码
1.package com.royal.service;
2.
3.import java.util.List;
4.
5.import javax.jws.WebParam;
6.import javax.jws.WebService;
7.
8.import com.royal.json.Concentrator;
9.
10.@WebService
11.public interface IHelloWorld {
12.
13. public Concentrator getConcentrator(@WebParam(name = "UID") String UID,
14. @WebParam(name = "name") String name);
15. // JSON
16. public String getJsonResult(@WebParam(name = "object") Object object);
17.
18. public String getJsonKeyValue(@WebParam(name = "object") Object object, @WebParam(name = "key") String key);
19.}
4.HelloWorldImpl 新增代码
Java代码
1.package com.royal.serviceImpl;
2.
3.import java.util.ArrayList;
4.import java.util.List;
5.
6.import javax.jws.WebService;
7.
8.import com.royal.json.Concentrator;
9.import com.royal.json.JSonDataFormatUtils;
10.import com.royal.service.IHelloWorld;
11.
12.@WebService(endpointInterface = "com.royal.service.IHelloWorld")
13.public class HelloWorldImpl implements IHelloWorld {
14.
15. public Concentrator getConcentrator(String UID,String name){
16. return new Concentrator(UID,name);
17. }
18.
19. // JSON
20. public String getJsonResult(Object object){
21. String result = null;
22. try {
23. result = JSonDataFormatUtils.resultJSonFormat(object);
24. } catch (Exception e) {
25. e.printStackTrace();
26. }
27. return result;
28. }
29.
30. public String getJsonKeyValue(Object object,String key){
31. String result = null;
32. try {
33. result = JSonDataFormatUtils.resultJSonStringKeyValue(object, key);
34. } catch (Exception e) {
35. e.printStackTrace();
36. }
37. return result;
38. }
39.
40.}
5.Concentrator 简单的POJO类
Java代码
1.package com.royal.json;
2.
3.public class Concentrator{
4.
5. private String UID;
6.
7. private String name;
8.
9. public Concentrator() {
10.
11. }
12.
13. public Concentrator(String UID, String name) {
14. this.UID = UID;
15. this.name = name;
16. }
17.
18. public String getUID() {
19. return UID;
20. }
21.
22. public void setUID(String uID) {
23. UID = uID;
24. }
25.
26. public String getName() {
27. return name;
28. }
29.
30. public void setName(String name) {
31. this.name = name;
32. }
33.
34.}
6.JSonDataFormatUtils JSON数据转换工具类---有很多数据类型间的转换,可上网搜索。
Java代码
1.package com.royal.json;
2.
3.import net.sf.json.JSONObject;
4.
5./**
6. *
7. * @author LONMID
8. *
9. * 所依赖的包:
json-lib-2.3-jdk15.jar, commons-collections.jar, commons-
10. * lang.jar, commons-logging.jar, commons-beanutils.jar,
11. * ezmorph-1.0.6.jar, xom-1.1.jar
12. *
13. */
14.public class JSonDataFormatUtils {
15.
16. /**
17. * 根据对象获得JSON
18. *
19. * @param object
20. * @return
21. * @throws Exception
22. */
23. public static String resultJSonFormat(Object object) throws Exception {
24. String result = "";
25.
26. JSONObject jsonResult = JSONObject.fromObject(object);
27. result = jsonResult.toString();
28.
29. return result;
30. }
31.
32. /**
33. * 根据对象获得名称的值 比如---name:
萧_瑟, 获得 萧_瑟
34. * @param object
35. * @param key
36. * @return
37. * @throws Exception
38. */
39. public static String resultJSonStringKeyValue(Object object, String key)
40. throws Exception {
41. String result = "";
42.
43. JSONObject jsonResult = JSONObject.fromObject(object);
44. result = jsonResult.getString(key);
45.
46. return result;
47. }
48.
49.}
7.beanRefServer.xml 和 web.xml就不贴了 和
(二)的一样
8.还最重要的一个地方 由于我是maven的项目,所有在项目部署启动前你得勾上json.jar
右键项目---属性---Tomcat---devloaderClasspath
这个小细节阻碍了我2天,由于没勾上,在进行测试的时候经常会报这样的错误:
[javax.xml.bind.JAXBException:
classxxxxxxxxnoranyofitssuperclassisknowntothiscontext.]
或者是
Exceptioninthread"main"javax.xml.ws.soap.SOAPFaultException:
net/sf/json/JSONObject
atorg.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:
156)
at$Proxy30.getJsonResult(UnknownSource)
之类的错误
后来经过debug,才发现少了JSONObject这个类,可是这个类明明是json.jar包里面带有的啊,为什么会找不到呢,然后想想spring的注入配置问题,试着在DevLoaderClasspath勾上json.jar,神奇的就可以了,网上找了很多,各有各的理解,不知道其他人是不是这种情况,反正我的是,所以我觉得在做这些调研小例子的时候还是先不要用maven项目,用传统的web项目就好了。
9.服务部署完成了,浏览器访问是不是可以成功
输入地址:
http:
//localhost:
8090/cxf_webservice/services/HelloWorldService?
wsdl
10.CXFClient 客户端测试 增加代码
Java代码
1.package com.royal.client;
2.
3.import java.util.List;
4.
5.import org.apache.cxf.interceptor.LoggingInInterceptor;
6.import org.apache.cxf.interceptor.LoggingOutInterceptor;
7.import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
8.
9.import com.royal.json.Concentrator;
10.import com.royal.service.IHelloWorld;
11.
12.public class CXFClient {
13.
14. public CXFClient(){
15.
16. }
17.
18. public static void main(String args[]) throws Exception {
19. JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
20. factory.getInInterceptors().add(new LoggingInInterceptor());
21. factory.getOutInterceptors().add(new LoggingOutInterceptor());
22. factory.setServiceClass(IHelloWorld.class);
23. factory.setAddress("http:
//localhost:
8090/cxf_webservice/services/HelloWorldService");
24. IHelloWorld client = (IHelloWorld) factory.create();
25.
26. //传递对象交互
27. Concentrator c = client.getConcentrator("DD154151", "江南路");
28.
29. System.out.println("\nconcentrator-----" + c.getUID() + "," + c.getName());
30.
31. //传递json交互
32. Concentrator concentrator = new Concentrator();
33. concentrator.setUID("CC0215613");
34. concentrator.setName("逸辉路集中器");
35. String result = client.getJsonResult(concentrator);
36. System.out.print(result);
37. String UID = client.getJsonKeyValue(concentrator,"UID");
38. System.out.println("UID:
" + UID);//CC0215613
39. String name = client.getJsonKeyValue(concentrator,"name");
40. System.out.println("name:
" + name);//逸辉路集中器
41.
42. }
43.
44.}
11.PC端测试结果
12.android端 Cxf_webservice_androidActivity 新增代码
Java代码
1.package com.royal.cxf_webservice;
2.
3.import java.util.List;
4.
5.import org.ksoap2.SoapEnvelope;
6.import org.ksoap2.serialization.SoapObject;
7.import org.ksoap2.serialization.SoapSerializationEnvelope;
8.import org.ksoap2.transport.HttpTransportSE;
9.
10.import android.app.Activity;
11.import android.os.Bundle;
12.import android.view.View;
13.import android.view.View.OnClickListener;
14.import android.widget.Button;
15.import android.widget.Toast;
16.
17.import com.royal.model.Concentrator;
18.
19.public class Cxf_webservice_androidActivity extends Activity {
20. private static String NAMESPACE = "
21. // webService地址
22. private static String URL = "http:
//10.0.2.2:
8090/cxf_webservice/services/HelloWorldService";
23. // private static String URL =
24. // "http:
//192.168.17.76:
8090/cxf_webservice/