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. 用javascript向一个网页连接接口发送请求,并接收该接口返回的json串

    一般前端与后端的互交都是通过json字符串来互交的,我的理解就是与网页接口的来回数据传递采用的数据结构就是json.一般是这样. 比如后端的代码是这样的: @RequestMapping(value ...

  2. windows 10是如何做到全平台统一的?

    1.EXE本身就是个容器,它可以在ARM平台上包含ARM的native code执行,也可以在x86平台上包含x86的native code执行,本质上无差别(所以麻烦那些说EXE不能在ARM平台上运 ...

  3. Activity的各种功能封装

    Activity全屏.隐藏系统标题栏.设置屏幕方向.Activity跳转等功能 /** * Copyright (C) 2012 TookitForAndroid Project * * Licens ...

  4. MyBatis里字段到枚举类型的转换/映射

    一.简介 我们在用MyBatis里,很多时间有这样一个需求:bean里有个属性是枚举,在DB存储时我们想存的枚举的代号,从DB拿出来时想直接映射成目标枚举类型,也即代号字段与Java枚举类的相互类型转 ...

  5. 使用activeMQ实现jms

    一:jms介绍         jms说白了就是java message service,是J2EE规范的一部分,跟jdbc差不多,sun只提供了接口,由各个厂商(provider)来进行具体的实现, ...

  6. 用nginx做代理服务器上网

    用nginx做代理服务器上网 目前现状:只有1个机器能上网(web),其他机器不能方法:能上网的做一个代理web服务器中转,其他机器连接它即可.采用nginx Nginx配置如下: server{   ...

  7. sigaction

    概述编辑 sigaction(查询或设置信号处理方式) 相关函数 signal,sigprocmask() ,sigpending,sigsuspend, sigemptyset 表头文件 #incl ...

  8. BZOJ 3040 最短路 (堆优化dijkstra)

    这题不是裸的最短路么?但是一看数据范围就傻了.点数10^6,边数10^7.这个spfa就别想了(本来spfa就是相当不靠谱的玩意),看来是要用堆优化dijkstra了.但是,平时写dijkstra时为 ...

  9. shell中timeout实现

    第一种 function timeout() { waitsec=$SLEEP_TIME ( $* ) & pid=$! ( sleep $waitsec && kill -H ...

  10. iOS-网络编程(二)文件上传和断点离线下载

    一. iOS中发送HTTP请求的方案 在iOS中,我们常用发送HTTP请求的方案有苹果原生(自带)NSURLConnection:用法简单,最古老最经典最直接的一种方案 (iOS 9.0弃用)NSUR ...