基于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
基于JDK6的JAX-WX为客户端提供XML与JSON格式数据服务,以及客户端采用AXIS调用案例的更多相关文章
- 使用基于Android网络通信的OkHttp库实现Get和Post方式简单操作服务器JSON格式数据
目录 前言 1 Get方式和Post方式接口说明 2 OkHttp库简单介绍及环境配置 3 具体实现 前言 本文具体实现思路和大部分代码参考自<第一行代码>第2版,作者:郭霖:但是文中讲 ...
- 提供json格式数据,去掉引号的方法
java文件中 String jsondata = json.toString();InputStream inputStream = new StringBufferInputStream(json ...
- @ResponseBody将集合数据转换为json格式并返回给客户端
spring-mvc.xml: <beans xmlns:mvc="http://www.springframework.org/schema/mvc" > <m ...
- JSON API免费接口 各种提供JSON格式数据返回服务网站的API接口
这里为大家搜集了一些能够返回JSON格式的服务接口.部分需要用JSONP调用. 电商接口 京东获取单个商品价格接口: http://p.3.cn/prices/mgets?skuIds=J_商品ID& ...
- (九)springmvc之json的数据请求(客户端发送json数据到服务端)
index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pag ...
- (转)基于OWIN WebAPI 使用OAuth授权服务【客户端模式(Client Credentials Grant)】
适应范围 采用Client Credentials方式,即应用公钥.密钥方式获取Access Token,适用于任何类型应用,但通过它所获取的Access Token只能用于访问与用户无关的Open ...
- 基于OWIN WebAPI 使用OAuth授权服务【客户端验证授权(Resource Owner Password Credentials Grant)】
适用范围 前面介绍了Client Credentials Grant ,只适合客户端的模式来使用,不涉及用户相关.而Resource Owner Password Credentials Grant模 ...
- 基于OWIN WebAPI 使用OAuth授权服务【客户端模式(Client Credentials Grant)】
适应范围 采用Client Credentials方式,即应用公钥.密钥方式获取Access Token,适用于任何类型应用,但通过它所获取的Access Token只能用于访问与用户无关的Open ...
- 基于JAX-WS的Web Service服务端/客户端 ;JAX-WS + Spring 开发webservice
一.基于JAX-WS的Web Service服务端/客户端 下面描述的是在main函数中使用JAX-WS的Web Service的方法,不是在web工程里访问,在web工程里访问,参加第二节. JAX ...
随机推荐
- BZOJ3399: [Usaco2009 Mar]Sand Castle城堡
3399: [Usaco2009 Mar]Sand Castle城堡 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 22 Solved: 17[Sub ...
- WEB/ WCF安全认证
- Function对象
Function对象是js中很重要的一个元素,js中所有自定义的函数都是Function对象,所以String,Number,Boolean,function等都是Function对象.所以,在使用t ...
- (Relax 数论1.8)POJ 1284 Primitive Roots(欧拉函数的应用: 以n为模的本原根的个数phi(n-1))
/* * POJ_2407.cpp * * Created on: 2013年11月19日 * Author: Administrator */ #include <iostream> # ...
- 转义字符和ASCII
一.字符(char) 数字(int) 屏幕显示 '\n' 10 换行 '\0' ...
- DB2完美卸载
会安装,也要会卸载.详细的安装说明不多,我这个我觉得写得还算全. 准备工作. 1.用 ps -ef|grep db2 找出db2安装目录 2. ./db2level 查出DB2的 ...
- JavaScript基础知识(学习笔记)
1. 在JavaScript中所有事物都是对象:字符串.数字.数组.日期等等2. 在JavaScript中,对象是拥有属性和方法的数据3. 属性是与对象相关的值,方法是能够在对象上执 ...
- Android获取屏幕分辨率及DisplayMetrics简介
Android 可设置为随着窗口大小调整缩放比例,但即便如此,手机程序设计人员还是必须知道手机屏幕的边界,以避免缩放造成的布局变形问题. 手机的分辨率信息是手机的一项重要信息,很好的是,Android ...
- wpf-DataTemplate应用
在WPF中,决定数据外观的是DataTemplate,即DataTemplate是数据内容的表现形式,一条数据显示成什么样子,是简单的文本还是直观的图形,就是由DataTemplate决定的.下面通过 ...
- ComboBox( 下拉列表框)
一. 加载方式//class 加载方式<select id="box" class="easyui-combobox" name="box&qu ...