基于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 ...
随机推荐
- bzoj3995[SDOI2015]道路修建
http://www.lydsy.com/JudgeOnline/problem.php?id=3995 线段树维护连通性. 我们发现,对于一个区间[L,R],我们只需要知道(1,L),(2,L),( ...
- 使用 PIVOT 和 UNPIVOT 行转列 列转行 报表统计 函数
官方文档:http://technet.microsoft.com/zh-cn/library/ms177410(v=SQL.105).aspx 可以使用 PIVOT 和 UNPIVOT 关系运算符将 ...
- python unicodeDecode error
混淆了 python2 里边的 str 和 unicode 数据类型. 0. 你需要的是让编码用实际编码而不是 ascii 1. 对需要 str->unicode 的代码,可以在前边写上 imp ...
- java--文件过滤器和简单系统交互
一.文件过滤器 /** * @Title: getFileByFilter * @Description: 根据正则rege获取给定路径及其子路径下的文件名(注意递归的深度不要太大) * @param ...
- Intellj Idea 2016.1.3的使用
Intellj Idea 2016.1.3的使用:http://blog.csdn.net/bleachswh/article/details/51811055 极客学院教程:http://wiki. ...
- 高性能WEB开发(11) - flush让页面分块,逐步呈现
高性能WEB开发(11) - flush让页面分块,逐步呈现 在处理比較耗时的请求的时候,我们总希望先让用户先看到部分内容,让用户知道系统正在进行处理,而不是无响应.一般大家在处理这样的情况,都使用a ...
- Android中BroadCast与Activity之间的通信
在看本文之前,假设你对于Android的广播机制不是非常了解.建议先行阅读我转载的一篇博文:图解 Android 广播机制. 因为本案例比較简单,故直接在此贴出代码,不做过多的阐述. 先上效果截图: ...
- @IBDesignable和@IBInspectable
近期一直在看苹果公司提供的两本swift官方教程电子书,一部是<The Swift Programming Language>,还有一部是<Using Swift With Coco ...
- Unity3D性能优化总结
一.程序方面 01.务必删除脚本中为空或不须要的默认方法: 02.仅仅在一个脚本中使用OnGUI方法. 03.避免在OnGUI中对变量.方法进行更新.赋值,输出变量建议在Update内. 04.同一脚 ...
- Linux能力(capability)机制的继承
1.Linux能力机制概述 在以往的UNIX系统上,为了做进程的权限检查,把进程分为两类:特权进程(有效用户ID是0)和非特权进程(有效用户ID是非0).特权进程可以通过内核所有的权限检查,而非特权进 ...