java中使用axis发布和调用webService及dom4j解析xml字符串
工作中需要调用webService服务,这里记录一下如何在java中发布和调用webService。
需要的jar包:
webService服务端:
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.xml.ws.Endpoint; @WebService
public class MyWebService { //@WebMethod(exclude = true)注解用于在webService中排除某方法
@WebMethod(exclude = true)
public String hello(String name) {
System.out.println("hello:" + name);
return "hello:" + name;
} public String transcoding(String fileName, String fileId, String userId, String filePath, String newPath) {
System.out.println("transcoding...");
System.out.println("fileName:" + fileName);
System.out.println("fileId:" + fileId);
System.out.println("userId:" + userId);
System.out.println("filePath:" + filePath);
System.out.println("newPath:" + newPath); String result = "";
result += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
result += "<root>";
result += "<hbzm>";
result += "<FileID>" + fileId + "</FileID>";
result += "<FileName>" + fileName + "</FileName>";
result += "<userid>" + userId + "</userid>";
result += "<filepath>" + filePath + "</filepath>";
result += "<newpath>" + newPath + "</newpath>";
result += "<result>ACK</result>";
result += "</hbzm>";
result += "</root>"; return result;
} public static void main(String[] args) {
/**
* 参数1:服务的发布地址 参数2:服务的实现者
*/
Endpoint.publish("http://localhost:8081/upload/transcoding", new MyWebService());
System.out.println("webservice start success");
}
}
webService客户端:
import java.rmi.RemoteException; import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException; import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element; public class MyWebClient {
public static void main(String[] args) {
callTrans();
} public static void callHello() {
try {
// new 一个服务
Service sv = new Service();
// 创建一个call对象
Call call = (Call) sv.createCall();
// 设置要调用的接口地址
call.setTargetEndpointAddress("http://localhost:8081/upload/transcoding");
// 设置要调用的接口方法
call.setOperationName(new QName("http://webservice.xzh.com/", "hello"));
// 设置参数,在设定参数时,不使用服务端定义的参数名,而是arg0~argN来定义
call.addParameter("arg0", XMLType.XSD_STRING, ParameterMode.IN);
// 返回参数类型
call.setReturnType(XMLType.XSD_STRING); Object result = call.invoke(new Object[] { "jason" });
System.out.println(result);
}
catch (ServiceException e) {
e.printStackTrace();
}
catch (RemoteException e) {
e.printStackTrace();
}
} public static void callTrans() {
try {
// new 一个服务
Service sv = new Service();
// 创建一个call对象
Call call = (Call) sv.createCall();
// 设置要调用的接口地址
call.setTargetEndpointAddress("http://localhost:8081/upload/transcoding");
// 设置要调用的接口方法
call.setOperationName(new QName("http://webservice.xzh.com/", "transcoding"));
// 设置参数,在设定参数时,不使用服务端定义的参数名,而是arg0~argN来定义
call.addParameter("arg0", XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter("arg1", XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter("arg2", XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter("arg3", XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter("arg4", XMLType.XSD_STRING, ParameterMode.IN);
call.setReturnType(XMLType.XSD_STRING);
//发送转码请求
String transResult = (String) call
.invoke(new Object[] { "fileName", "fileIdTrans", "userId", "annexPathWithName", "basePath" });
//解析转码接口返回的xml报文
Document doc = DocumentHelper.parseText(transResult);
Element root = doc.getRootElement();
Element e = root.element("hbzm");
System.out.println(e.elementText("result"));
System.out.println(e.elementText("FileID"));
System.out.println(e.elementText("FileName"));
System.out.println(e.elementText("userid"));
System.out.println(e.elementText("filepath"));
System.out.println(e.elementText("newpath"));
}
catch (ServiceException e) {
e.printStackTrace();
}
catch (RemoteException e) {
e.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
}
}
}
日志截图:
服务端:
客户端:
java中使用axis发布和调用webService及dom4j解析xml字符串的更多相关文章
- Axis 发布、调用WebService(转)
一.JWS方法发布WebService 1.在官方网站下载axis的工程(这个等下就有用的)和源码.jar包等,下载地址是: http://www.apache.org/dyn/closer.cgi/ ...
- 使用CXF发布和调用webservice之HelloWorld入门
依赖的JAR cxf-2.2.10.jar jetty-6.1.21.jar jetty-util-6.1.21.jar servlet-2_5-api.jar ...
- 谈谈JAVA中的安全发布
谈谈JAVA中的安全发布 昨天看到一篇文章阐述技术类资料的"等级",看完之后很有共鸣.再加上最近在工作中越发觉得线程安全性的重要性和难以捉摸,又掏出了<Java并发编程实战& ...
- 中文乱码在java中URLEncoder.encode方法要调用两次解决
中文乱码在java中URLEncoder.encode方法要调用两次解决 一.场景: 1.我在客户端要通过get方式调用服务器端的url,将中文参数做utf-8编码,需要在js中两次的进行编码,服务器 ...
- java中采用dom4j解析xml文件
一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4 ...
- 转:在java中使用dom4j解析xml
JAVA 使用Dom4j 解析XML Java DOM4J Parser - Parse XML Document Dom4j下载及使用Dom4j读写XML简介 在java中使用dom4j解析xml ...
- 在java项目中怎样利用Dom4j解析XML文件获取数据
在曾经的学习.net时常常会遇到利用配置文件来解决项目中一些须要常常变换的数据.比方数据库的连接字符串儿等.这个时候在读取配置文件的时候.我们一般会用到一个雷configuration,通过这个类来进 ...
- 【java项目实战】dom4j解析xml文件,连接Oracle数据库
简单介绍 dom4j是由dom4j.org出品的一个开源XML解析包.这句话太官方.我们还是看一下官方给出的解释.例如以下图: dom4j是一个易于使用的.开源的,用于解析XML,XPath和XSLT ...
- 【JAVA使用XPath、DOM4J解析XML文件,实现对XML文件的CRUD操作】
一.简介 1.使用XPath可以快速精确定位指定的节点,以实现对XML文件的CRUD操作. 2.去网上下载一个“XPath帮助文档”,以便于查看语法等详细信息,最好是那种有很多实例的那种. 3.学习X ...
随机推荐
- Atitit. 数据约束 校验 原理理论与 架构设计 理念模式java php c#.net js javascript mysql oracle
Atitit. 数据约束 校验 原理理论与 架构设计 理念模式java php c#.net js javascript mysql oracle 1. 主键1 2. uniq index2 3. ...
- Knockout JS 演示样例
五个小样例,来自Knockout JS官方站点. //tutorial 1 //following codes uses to demonstrate observable values and ta ...
- iOS开发多线程篇 11 —自定义NSOperation
iOS开发多线程篇—自定义NSOperation 一.实现一个简单的tableView显示效果 实现效果展示: 代码示例(使用以前在主控制器中进行业务处理的方式) 1.新建一个项目,让控制器继承自UI ...
- C 调用 lua 函数
C 调用 lua 函数 需要考虑的问题: 1. 使用 lua_pcall 可以调用 lua 函数,首先把 lua 函数入栈,然后把参数入栈, lua_pcall(luaState, 参数个数, 返回值 ...
- HTML5 中fullscreen 中的几个API和fullscreen欺骗
// 转自:https://my.oschina.net/jackyrong/blog/114086 HTML 5中的full screen,目前可以在除IE和opera外的浏览器中使用 ,有的时 ...
- Havel--Hakimi定理推断可图化 python
介绍: 哈维尔[1955]--哈吉米[1962]算法能够用来判读一个度序列d是否是可图化的. 哈维尔[1955]--哈吉米[1962]定理: 对于N > 1,长度为N的度序列d可以可图化当且仅当 ...
- 中移苏研DCOS实践之路完整篇
一.实践背景 1.1现网生产系统存在的问题 在中国移动内部各省市公司,由于技术迭代.设备更新的原因,设备繁杂,有x86server .VMware虚拟机.OpenStack虚拟机以及不同厂商的物理机( ...
- zabbix 监控如下内容
我们使用zabbix做了如下的监控: 1.硬件监控. 通过SNMP来进行路由器交换机的监控(这些可以跟一些厂商沟通来了解如何做). 服务器的温度以及其他,可以通过IPMI来实现.当然如果没有硬件全都是 ...
- ACM Computer Factory - poj 3436 (最大流)
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5949 Accepted: 2053 Special Judge ...
- IDEA中maven打包跳过Junit Test
运行MVN install时需要跳过Junit的test cases,可以采用下面的方法: mvn install -DskipTests 或者mvn install -Dmaven.test.ski ...