基于JDK6的JAX-WX为客户端提供XML与JSON格式数据服务,以及客户端采用AXIS调用案例

1:WebService服务端工程目录如下:

需要第三方jar包:gson-2.2.4.jar\javax.xml.bind.jar\commons-lang-2.5.jar

源码如下:

package com.mw.dao;

import com.mw.vo.Nsr;
import java.util.List;

/**
 * @author  y
 * @date    2015-4-4 9:23:53
 * @version 1.0
 * @desc
 */
public interface NsrDao {

    List<Nsr> getNsrList();

}
package com.mw.dao.impl;

import com.mw.dao.NsrDao;
import com.mw.vo.Nsr;
import java.util.ArrayList;
import java.util.List;

/**
 * @author  y
 * @date    2015-4-4 9:27:34
 * @version V1.0
 * @desc
 */
public class NsrDaoImpl implements NsrDao{

    public List<Nsr> getNsrList() {
        List<Nsr> list = new ArrayList<Nsr>();
        Nsr nsr = new Nsr();
        nsr.setNsrsbh("123");
        nsr.setNsrmc("name1");
        list.add(nsr);
        nsr = new Nsr();
        nsr.setNsrsbh("456");
        nsr.setNsrmc("name2");
        list.add(nsr);

        return list;
    }

}
package com.mw.services;

import com.google.gson.Gson;
import com.mw.dao.NsrDao;
import com.mw.dao.impl.NsrDaoImpl;
import com.mw.utils.JaxbUtil;
import com.mw.vo.Nsr;
import com.mw.vo.xml.NsrRoot;
import javax.jws.WebMethod;
import javax.jws.WebService;

/**
 * @author y
 * @date 2015-4-4 9:31:11
 * @version V1.0
 * @desc
 */
@WebService
public class NsrManager {

    private final NsrDao nd;
    private final Gson gson;

    public NsrManager() {
        nd = new NsrDaoImpl();
        gson = new Gson();
    }

    @WebMethod
    public String getNsrListJSON() {
        return gson.toJson(nd.getNsrList());
    }

    @WebMethod
    public String getNsrListXML() {
        NsrRoot obj = new NsrRoot();
        obj.setList(nd.getNsrList());

        JaxbUtil jaxbUtil = new JaxbUtil(NsrRoot.class, JaxbUtil.CollectionWrapper.class);

        return jaxbUtil.toXml(obj, "utf-8");
    }

    @WebMethod
    public String getNsrObjectXML() {
        Nsr nsr = nd.getNsrList().get(0);
        JaxbUtil jaxbUtil = new JaxbUtil(Nsr.class);
        return jaxbUtil.toXml(nsr, "utf-8");
    }
}
package com.mw.utils;

import java.io.StringWriter;
import java.util.Collection;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlAnyElement;
import javax.xml.namespace.QName;
import org.apache.commons.lang.StringUtils;

/**
 * @author y
 * @date 2015-4-4 10:43:08
 * @version V1.0
 * @desc JAXB工具类用于将Java 对象转换为XML字符串
 */
public class JaxbUtil {

    private JAXBContext jaxbCtx;

    public JaxbUtil(Class<?>... types) {
        try {
            jaxbCtx = JAXBContext.newInstance(types);
        } catch (JAXBException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * Java Object->Xml
     * @param root
     * @param encoding
     * @return
     */
    public String toXml(Object root, String encoding) {
        try {
            StringWriter writer = new StringWriter();
            createMarshaller(encoding).marshal(root, writer);
            return writer.toString();
        } catch (JAXBException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * Java Object->Xml, 用于支持对Root Element是Collection的情形
     * @param root
     * @param rootName
     * @param encoding
     * @return
     */
    public String toXml(Collection root, String rootName, String encoding) {
        try {
            CollectionWrapper wrapper = new CollectionWrapper();
            wrapper.collection = root;

            JAXBElement<CollectionWrapper> wrapperElement = new JAXBElement<CollectionWrapper>(
                    new QName(rootName), CollectionWrapper.class, wrapper);

            StringWriter writer = new StringWriter();
            createMarshaller(encoding).marshal(wrapperElement, writer);

            return writer.toString();
        } catch (JAXBException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 创建Marshaller, 设定encoding
     * @param encoding
     * @return
     */
    public Marshaller createMarshaller(String encoding) {
        try {
            Marshaller marshaller = jaxbCtx.createMarshaller();

            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

            if (StringUtils.isNotBlank(encoding)) {
                marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);
            }
            return marshaller;
        } catch (JAXBException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 封装Root Element 是 Collection的情况.
     */
    public static class CollectionWrapper {
        @SuppressWarnings("unchecked")
        @XmlAnyElement
        protected Collection collection;
    }

}
package com.mw.vo;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

/**
 * @author  y
 * @date    2015-4-4 9:24:52
 * @version V1.0
 * @desc
 */
@XmlRootElement(name="nsr")
public class Nsr {

    private String nsrsbh;
    private String nsrmc;

    @XmlElement(name="nsrsbh")
    public String getNsrsbh() {
        return nsrsbh;
    }

    public void setNsrsbh(String nsrsbh) {
        this.nsrsbh = nsrsbh;
    }

    @XmlElement(name="nsrmc")
    public String getNsrmc() {
        return nsrmc;
    }

    public void setNsrmc(String nsrmc) {
        this.nsrmc = nsrmc;
    }

}
package com.mw.vo.xml;

import com.mw.vo.Nsr;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

/**
 * @author  y
 * @date    2015-4-4 10:56:11
 * @version V1.0
 * @desc
 */
@XmlRootElement(name="nsrs")
public class NsrRoot {
    private List<Nsr> list;

    @XmlElement(name="nsr")
    public List<Nsr> getList() {
        return list;
    }

    public void setList(List<Nsr> list) {
        this.list = list;
    }

}

项目部署后在浏览器中输入:http://localhost:7001/jax_ws_server/NsrManagerService?wsdl

可以看到XML描述。

2:客户端

package com.mw.servlet;

import com.mw.utils.AxisInvokeJAXWSUtil;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author  y
 * @date    2015-4-4 10:15:40
 * @version 1.0
 * @desc
 */
public class NsrServlet extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/xml;charset=UTF-8");
        PrintWriter out = response.getWriter();

        String result = "";

        try {
            result = AxisInvokeJAXWSUtil.invoke(
                    "http://services.mw.com/",
                    "getNsrListXML",
                    "http://localhost:7001/jax_ws_server/NsrManagerService?wsdl",
                    null);

        } catch (Exception ex) {
            Logger.getLogger(NsrServlet.class.getName()).log(Level.SEVERE, null, ex);
        } finally{
            out.print(result);
            out.close();
        }
    } 

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    } 

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
}
package com.mw.utils;

import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.encoding.XMLType;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

/**
 * @author yan
 * @date 2015-4-2 22:49:33
 * @version V1.0
 * @desc
 */
public final class AxisInvokeJAXWSUtil {
    /**
     *
     * @param namespace
     * @param method
     * @param wsdl
     * @param params
     * @return
     * @throws Exception
     */
    public static String invoke(String namespace, String method, String wsdl, Object[] params) throws Exception{
        Object obj = null;

        Service service = new Service();

        Call call = (Call) service.createCall();
        call.setOperationName(new QName(namespace, method));
        call.setTargetEndpointAddress(wsdl);

        if (null != params) {
            int len = params.length;

            for (int i = 0; i < len; i++) {
                call.addParameter("arg" + i, XMLType.XSD_STRING, ParameterMode.IN);
            }

            if (len > 0) {
                call.setReturnType(XMLType.XSD_STRING);
            }
        } else {
            params = new Object[]{};
        }

        obj = call.invoke(params);

        return obj == null ? "" : obj.toString();
    }

}

项目存在百度网盘上:http://pan.baidu.com/s/1hqkZh8C

时间: 2024-11-05 21:46:54

基于JDK6的JAX-WX为客户端提供XML与JSON格式数据服务,以及客户端采用AXIS调用案例的相关文章

JSON API免费接口 各种提供JSON格式数据返回服务网站的API接口

这里为大家搜集了一些能够返回JSON格式的服务接口.部分需要用JSONP调用. 电商接口 京东获取单个商品价格接口: http://p.3.cn/prices/mgets?skuIds=J_商品ID&type=1 用例 ps:商品ID这么获取:http://item.jd.com/954086.html 淘宝商品搜索建议: http://suggest.taobao.com/sug?code=utf-8&q=商品关键字&callback=cb 用例 ps:callback是回调函数

(九)springmvc之json的数据请求(客户端发送json数据到服务端)

index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd&quo

@ResponseBody将集合数据转换为json格式并返回给客户端

spring-mvc.xml: <beans xmlns:mvc="http://www.springframework.org/schema/mvc" > <mvc:annotation-driven/> js代码: $.post("${pageContext.request.contextPath}/getJson",{},function(data){ alert(JSON.stringify(data)); }); java代码: @

手写一个模块化的 TCP 服务端客户端

前面的博客 基于 socket 手写一个 TCP 服务端及客户端 写过一个简单的 TCP 服务端客户端,没有对代码结构进行任何设计,仅仅是实现了相关功能,用于加深对 socket 编程的认识. 这次我们对整个代码结构进行一下优化,使其模块化,易扩展,成为一个简单意义上的“框架”. 对于 Socket 编程这类所需知识偏底层的情况(OS 协议栈的运作机制,TCP 协议的理解,多线程的理解,BIO/NIO 的理解,阻塞函数的运作原理甚至是更底层处理器的中断.网卡等外设与内核的交互.核心态与内核态的切

如何实现服务端客户端异步通信

AJAX客户端与服务端,可以在[不刷新整个浏览器]的情况下,与服务器进行异步通信的技术.即ajax是一个[局部刷新]的异步通信技术,AJAX技术不是全新的语言,时2005年谷歌公司提出的一种全新的编程模式,不是新的编程语言. 传统web应用请求和响应的特点 ( 1 )请求:浏览器以 HTTP 协议的方式提交请求到服务器 ( 2 )响应:服务器以 HTTP 协议的方式响应内容到浏览器 注意: HTTP 是 WEB 大众化非安全协议 HTTPS 是 WEB 安全协议,是基于 HTTP 协议的,且加了

服务器采用JSON格式返回数据给安卓客户端

最近打算做一个酒店无线点餐的APP,需要将图片放在服务器端的文件夹下,客户端通过更新菜单按钮可以获得最新的菜品信息.要获取图片的信息首先需要得到图片的名称.对应的菜品价格以及图片所在的路径,因此需要在服务器端搜索文件夹下的所有图片并将数据打包成JSON格式转发给客户端,具体格式为[{name="菜名",price=价格,path="文件路径",category="菜品分类:如川菜.湘菜等"}].服务器端采用servlet+jsp部署在Tomcat

Spring提供的用于访问Rest服务的客户端:RestTemplate实践

什么是RestTemplate? RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率.调用RestTemplate的默认构造函数,RestTemplate对象在底层通过使用java.net包下的实现创建HTTP 请求,可以通过使用ClientHttpRequestFactory指定不同的HTTP请求方式.ClientHttpRequestFactory接口主要提供了两种实现方式

jQuery Validate【为表单提供了强大的验证功能,让客户端表单验证变得更简单】

jQuery Validate jQuery Validate 插件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求.该插件捆绑了一套有用的验证方法,包括 URL 和电子邮件验证,同时提供了一个用来编写用户自定义方法的 API.所有的捆绑方法默认使用英语作为错误信息,且已翻译成其他 37 种语言. 该插件是由 J?rn Zaefferer 编写和维护的,他是 jQuery 团队的一名成员,是 jQuery UI 团队的主要开发人员,是 QUn

(转)基于OWIN WebAPI 使用OAuth授权服务【客户端模式(Client Credentials Grant)】

适应范围 采用Client Credentials方式,即应用公钥.密钥方式获取Access Token,适用于任何类型应用,但通过它所获取的Access Token只能用于访问与用户无关的Open API,并且需要开发者提前向开放平台申请,成功对接后方能使用.认证服务器不提供像用户数据这样的重要资源,仅仅是有限的只读资源或者一些开放的 API.例如使用了第三方的静态文件服务,如Google Storage或Amazon S3.这样,你的应用需要通过外部API调用并以应用本身而不是单个用户的身份