WebService CXF框架的使用(实现JSON与XML数据传输)

所依赖的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 ingredients = new HashMap();
    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 ingredients = new HashMap();
    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("");
    sb.append("");
    sb.append("机械战警");
    sb.append("" + name + "");
    sb.append("一部好莱坞大片,3D观影,不错!!!");
    sb.append("25");
    sb.append("");
    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的解析,希望大家看了之后对自己有所帮助,如有疑问,留言讨论

你可能感兴趣的:(JAVA)