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. 自解压的方式创建VC++程序的打包

    Walkthrough: Deploying a Visual C++ Application By Using the Visual C++ Redistributable Package Visu ...

  2. Boost编程之获取可执行文件的当前路径

    #include <boost/filesystem/path.hpp> #include <boost/filesystem/operations.hpp> std::str ...

  3. Linux sar使用

    [root@ywcrmdb ~]# sar -d 1 10 Linux 2.6.32-220.el6.x86_64 (ywcrmdb)  2014年04月19日  _x86_64_ (4 CPU) 1 ...

  4. Oracle 常用语句汇总

    1.查询当前用户的建表SQL: SELECT DBMS_METADATA.GET_DDL('TABLE','COL_MERCH_INFO') FROM DUAL; 2.查询当前用户的所有表: SELE ...

  5. Servlet问题:servlet cannot be resolved to a type解决办法

    工程里的路径权限高,并且eclipse并到classpath里寻找jar位置,所以我就到我的java项目里 项目名-->右键 Property-->选择 Java Build Path-- ...

  6. Codeforces Round #FF (Div. 2):Problem A - DZY Loves Hash

    A. DZY Loves Hash time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  7. 实战:推断mysql中当前用户的连接数-分组筛选

    #connets.sh #!/bin/sh #ocpyang@126.com #依据输入參数u或d来显示出相应的username或数据库名中用户的连接数. #也能够输入u 详细username或d 详 ...

  8. Flex中的折线图

    1.问题背景 在Flex中,制作一个折线图.而且给折线图的横轴和纵轴进行样式设置,详细实现过程例如以下: 2.实现实例 (1)设置横轴样式和数据绑定 <mx:horizontalAxis> ...

  9. linux修改主机名-IP

    1.查看当前主机名  hostname 2. ifconfig   显示所有网络接口的信息  ifconfig eth0   显示网卡eth0的信息 3.临时修改主机名 hostname rusky. ...

  10. 1.引入必要的文件 2.加载 UI 组件的方式 4.Parser 解析器

    //引入 jQuery 核心库,这里采用的是 2.0 <scripttype="text/javascript"src="easyui/jquery.min.js& ...