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调用案例的更多相关文章

  1. 使用基于Android网络通信的OkHttp库实现Get和Post方式简单操作服务器JSON格式数据

     目录 前言 1 Get方式和Post方式接口说明 2 OkHttp库简单介绍及环境配置 3 具体实现 前言 本文具体实现思路和大部分代码参考自<第一行代码>第2版,作者:郭霖:但是文中讲 ...

  2. 提供json格式数据,去掉引号的方法

    java文件中 String jsondata = json.toString();InputStream inputStream = new StringBufferInputStream(json ...

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

    spring-mvc.xml: <beans xmlns:mvc="http://www.springframework.org/schema/mvc" > <m ...

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

    这里为大家搜集了一些能够返回JSON格式的服务接口.部分需要用JSONP调用. 电商接口 京东获取单个商品价格接口: http://p.3.cn/prices/mgets?skuIds=J_商品ID& ...

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

    index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pag ...

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

    适应范围 采用Client Credentials方式,即应用公钥.密钥方式获取Access Token,适用于任何类型应用,但通过它所获取的Access Token只能用于访问与用户无关的Open ...

  7. 基于OWIN WebAPI 使用OAuth授权服务【客户端验证授权(Resource Owner Password Credentials Grant)】

    适用范围 前面介绍了Client Credentials Grant ,只适合客户端的模式来使用,不涉及用户相关.而Resource Owner Password Credentials Grant模 ...

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

    适应范围 采用Client Credentials方式,即应用公钥.密钥方式获取Access Token,适用于任何类型应用,但通过它所获取的Access Token只能用于访问与用户无关的Open ...

  9. 基于JAX-WS的Web Service服务端/客户端 ;JAX-WS + Spring 开发webservice

    一.基于JAX-WS的Web Service服务端/客户端 下面描述的是在main函数中使用JAX-WS的Web Service的方法,不是在web工程里访问,在web工程里访问,参加第二节. JAX ...

随机推荐

  1. Oracle12c中新建用户

    运行SQLPlus,以  sysdba打开 新建用户需要 create user C##[username] identified by [password] grant dba to C##[use ...

  2. Mysql时间戳开始时间1970-01-01 00:00:00和PHP date慢8小时

    mysql> select unix_timestamp('1970-01-01 00:00:01');+---------------------------------------+| un ...

  3. 从windows server 2003中学到的事儿

    2003让我学会了几件事儿, 第一.自己会装系统了. 第二.知道很多选项是可以自己进行设置的.这点很重要,本来xp用得很习惯,然后很多都理所当然得认为,就应该是那个样子,可是,并不是的. 在2003不 ...

  4. 【转】listView中,checkBox的显示和隐藏

    原文网址:http://www.cnblogs.com/vicma/p/3460500.html 在listView中,每个item都有一个ChexBox,当显示的时候在listView外面设置一个按 ...

  5. [LeetCode] 116. Populating Next Right Pointers in Each Node 解决思路

    Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *nex ...

  6. velocity序列动画

          结合上次提到的velocity的UI Pack存在一下问题: 动画名称过长,语意性差 使用UI Pack的动画,loop属性会失效 无法监听动画完成时机        我这里想到了一种解决 ...

  7. Java枚举7常见种用法

    DK1.5引入了新的类型——枚举.在Java中它虽然算个“小”功能,却给我的开发带来了“大”方便. 方法/步骤 用法一:常量 在JDK1.5之前,我们定义常量都是:publicstaticfianl. ...

  8. svn版本信息自动更新到源代码

     背景:在线上代码和线下代码不一致时,用这个时间先比对是很重要的,首先看时间确定是不是最新的代码,再进行问题排查是很有必要的.Subversion 的 svn:keywords 是一个非常有用的功能, ...

  9. 一种调用opencv库的C++工程通用的Makefile模板

    第一次自己写makefile,记录一下 #Compilers #CXX=/opt/compiler/gcc-/bin/g++ CXX = g++ #Includes INCLUDE_FLAGS = - ...

  10. 互联网程序设计c++

    地址:ftp.sist.stdu.edu.cn用户名:lzh_hlw20133密码:lzhstdftp端口:2014