javawebservice事务

java如何调用webservice接口

Java调用WebService可以直接使用Apache提供的axis.jar自己编写代码,或者利用Eclipse自动生成WebService Client代码,利用其中的Proxy类进行调用。理论上是一样的,只不过用Eclipse自动生成代码省事些。

1、编写代码方式:

package com.yudun.test;

import java.rmi.RemoteException;

import org.apache.axis.client.Call;

import org.apache.axis.client.Service;

import org.apache.axis.message.PrefixedQName;

import org.apache.axis.message.SOAPHeaderElement;

import com.cezanne.golden.user.Exception;

import com.cezanne.golden.user.UserManagerServiceProxy;

import javax.xml.namespace.QName;

import java.net.MalformedURLException;

import javax.xml.rpc.ServiceException;

import javax.xml.soap.Name;

import javax.xml.soap.SOAPException;

public class testWebService {

public static String getResult() throws ServiceException, MalformedURLException, RemoteException, SOAPException

{

//标识Web Service的具体路径

String endpoint = “WebService服务地址”;

// 创建 Service实例

Service service = new Service();

// 通过Service实例创建Call的实例

Call call = (Call) service.createCall();

//将Web Service的服务路径加入到call实例之中.

call.setTargetEndpointAddress( new java.net.URL(endpoint) );//为Call设置服务的位置

// 由于需要认证,故需要设置调用的SOAP头信息。

Name headerName = new PrefixedQName( new QName(“发布的wsdl里的targetNamespace里的url”, “string_itemName”) );

org.apache.axis.message.SOAPHeaderElement header = new SOAPHeaderElement(headerName);

header.addTextNode( “blablabla” );

call.addHeader(header);

// SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement(“发布的wsdl里的targetNamespace里的url”, “SoapHeader”);

// soapHeaderElement.setNamespaceURI(“发布的wsdl里的targetNamespace里的url”);

// try

// {

// soapHeaderElement.addChildElement(“string_itemName”).setValue(“blablabla”);

// }

// catch (SOAPException e)

// {

// e.printStackTrace();

// }

// call.addHeader(soapHeaderElement);

//调用Web Service的方法

org.apache.axis.description.OperationDesc oper;

org.apache.axis.description.ParameterDesc param;

oper = new org.apache.axis.description.OperationDesc();

oper.setName(“opName”);

param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName(“”, “arg0”), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(“”, “string”), java.lang.String.class, false, false);

param.setOmittable(true);

oper.addParameter(param);

param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName(“”, “arg1”), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(“”, “string”), java.lang.String.class, false, false);

param.setOmittable(true);

oper.addParameter(param);

param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName(“”, “arg2”), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(“”, “string”), java.lang.String.class, false, false);

param.setOmittable(true);

oper.addParameter(param);

oper.setReturnType(new javax.xml.namespace.QName(“”, “string”));

oper.setReturnClass(java.lang.String.class);

oper.setReturnQName(new javax.xml.namespace.QName(“”, “return”));

oper.setStyle(org.apache.axis.constants.Style.WRAPPED);

oper.setUse(org.apache.axis.constants.Use.LITERAL);

oper.addFault(new org.apache.axis.description.FaultDesc(

new javax.xml.namespace.QName(“发布的wsdl里的targetNamespace里的url”, “Exception”),

“Exception”,

new javax.xml.namespace.QName(“发布的wsdl里的targetNamespace里的url”, “Exception”),

true

));

call.setOperation( oper );

call.setOperationName(new javax.xml.namespace.QName(“发布的wsdl里的targetNamespace里的url”, “opName”));

//调用Web Service,传入参数

String res = ( String ) call.invoke( new Object[](“arg0″,”arg1”));

System.out.println(“===============”);

return res;

}

/**

* @param args

*/

public static void main(String[] args) {

try {

System.out.println(getResult());

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (RemoteException e) {

e.printStackTrace();

} catch (ServiceException e) {

e.printStackTrace();

} catch (SOAPException e) {

e.printStackTrace();

}

}

}

2、利用Eclipse自动生成WebService client代码就容易多了:(由于还不会发图片,就用语言描述了,大家酬和看吧。。。)

首先,new project,选择other,在输入框中输入Web Service Client,选中搜索后的结果,点击Next,在Service definition中输入 WebService的发布地址,点击Finish

这样,WebService Client代码已经生成好了。

接下来写一个Test类,在main函数中输入如下代码:

String endpoint = “服务器的WebService的地址”;

YourWebServiceNameProxy umsp = new YourWebServiceNameProxy (endpoint);

try {

String resultStr = umsp.opMethod(“arg0″,”arg1”);

System.out.println(resultStr);

} catch (Exception e) {

System.out.println(“异常”);

e.printStackTrace();

} catch (RemoteException e) {

System.out.println(“RemoteException异常”);

e.printStackTrace();

}

如果还有疑问的话还有视频,如果对你有帮助请采纳!

如何在Java中快速发布WebService服务

1,在Java项目中发布一个WebService服务:

如何发布?

——JDK1.6中JAX-WS规范定义了如何发布一个WebService服务;

(1)用jdk1.6.0_21以后的版本发布;

(2)与Web服务相关的类,都位于Javax.jws.*包中

@WebService——此注解用在类上指定将此类发布成一个WebService;

EndPoint——此类为端点服务类,其中publish()方法用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上,用于发布。

2,例子:

(1)发布WebService服务

HelloWebService.java:

[java] view plain copy

span style=”font-family:KaiTi_GB2312;font-size:18px;”package cn.tgb.ws;

importjavax.jws.WebMethod;

importjavax.jws.WebService;

importjavax.xml.ws.Endpoint;

/**

*  @WebService - 它是一个注解,用在类上指定将此类发布成一个ws.

Endpoint – 此类为端点服务类,它的方法publish用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上。

* @author xuemin

*

*/

@WebService

public classHelloWebService {

publicString HelloWord(String name){

return”Hello: “+name;

}

/**

*添加exclude=true后,HelloWord2()方法不会被发布

* @param name

* @return

*/

@WebMethod(exclude=true)

publicString HelloWord2(String name){

return”Hello: “+name;

}

publicstatic void main(String[] args) {

/**

*参数1:服务的发布地址

*参数2:服务的实现者

*/

Endpoint.publish(“”,new HelloWebService());

}

}/span

注:

@WebService- 它是一个注解,用在类上指定将此类发布成一个ws.

Endpoint –此类为端点服务类,它的方法publish用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上。

运行以上程序进行发布。

(2)查看wsdl

地址:

只要在客户端浏览器能看到此WSDL文档,说明服务发布成功

以上服务发布成功;

总结:

如何发布一个Web服务:

a,在类上添加@WebService注解

(注:此注解是jdk1.6提供的,位于javax.jws.WebService包中)

b,通过EndPoint(端点服务)发布一个WebService

(注:EndPoint是jdk提供的一个专门用于发布服务的类,该类的publish方法接收两个参数,一个是本地的服务地址,二是提供服务的类。位于 javax.xml.ws.Endpoint包中)

c,注:

类上添加注解@WebService,类中所有非静态方法都会被发布;

静态方法和final方法不能被发布;

方法上加@WebMentod(exclude=true)后,此方法不被发布;

(3)客户端访问发布的服务

根据WSDL文档来在客户端编写代码,访问发布的服务;

但是,WSDL文档看不懂怎么办?代码该如何编写?

——你看不懂,JDK看得懂,wsimport是JDK自带的,可以根据WSDL文档生成客户端调用代码的工具。无论服务器端WebService使用什么语言编写的,豆浆在客户端生成Java代码。所以服务器用什么语言编写的并不重要。

wsimport.exe命令参数熟知:

-d:生成class文件。默认参数。

-s:生成Java文件

-p:自定义包结构

解析地址生成源码到E盘:

执行以上命令后,即可在E盘下生成如下包及类

注:还可以自定义包结构:

自定义包结构的命令:

将生成的包及.java文件复制到客户端:如下图

创建访问服务的类:MyClient.java:

MyClient.java:

[java] view plain copy

span style=”font-family:KaiTi_GB2312;font-size:18px;”package cn.tgb.ws;

public classMyClient {

publicstatic void main(String[] args) {

HelloWebServiceServicehwss = new HelloWebServiceService();

HelloWebServicehws = hwss.getHelloWebServicePort();

Stringresult=hws.helloWord(“hanxuemin”);

System.out.println(result);

}

}/span

javawebservice事务

用java怎么写webservice?

Web Services以XML作为数据交换的标准格式,它是跨平台的应用,允许以任何方式创建Web Services,在.NET、Java平台上访问。

在Java平台创建和访问Web Service多通过Axis完成。Axis本质上就是一个SOAP引擎,提供创建服务器端、客户端和网关SOAP操作的基本框架。Axis目前版本是为Java编写的。在使用Axis访问Web Service时,需要引入以下包(10个):axis-ant.jar、axis.jar、commons-discovery-0.2.jar、commons-logging-1.0.4.jar、jaxrpc.jar、log4j-1.2.8.jar、saaj.jar、wsdl4j-1.5.1.jar、activation-1.1.jar和mail-1.4.jar。

(1)访问Java创建的Web Service

在当前Java客户端应用中添加相应的10个Axis包,编写客户端程序:

import org.apache.axis.client.Call;

import org.apache.axis.client.Service;

public class Test {

public static void main(String[] args) throws Exception {

try{

String endpoint = “”;

Service service = new Service();

Call call = (Call)service.createCall();

call.setTargetEndpointAddress(new java.net.URL(endpoint));

call.setOperationName(“getHello”);

String res = (String) call.invoke(new Object[]{});

System.out.println(res);

}

catch (Exception ex){

ex.printStackTrace();

}

}

}

其中两处代码加粗,第一处表示引用Java Web Service的URL,第二处表示公共的方法名称。

如何在java web 里面使用webservice技术

一、利用jdk web服务api实现,这里使用基于 SOAP message 的 Web 服务

1.首先建立一个Web services EndPoint:

package Hello;

import javax.jws.WebService;

import javax.jws.WebMethod;

import javax.xml.ws.Endpoint;

@WebService

public class Hello {

@WebMethod

public String hello(String name) {

return “Hello, ” + name + “\n”;

}

public static void main(String[] args) {

// create and publish an endpoint

Hello hello = new Hello();

Endpoint endpoint = Endpoint.publish(“”, hello);

}

}

2.使用 apt 编译 Hello.java(例:apt -d [存放编译后的文件目录] Hello.java ) ,会生成 jaws目录

3.使用java Hello.Hello运行,然后将浏览器指向就会出现下列显示

4.使用wsimport 生成客户端

使用如下:wsimport -p . -keep

这时,会在当前目录中生成如下文件:

5.客户端程序:

1class HelloClient{

2public static void main(String args[]) {

3 HelloService service = new HelloService();

4 Hello helloProxy = service.getHelloPort();

5 String hello = helloProxy.hello(“你好”);

6 System.out.println(hello);

7 }

8}

9

以上方法还稍显繁琐,还有更加简单的方法

二、使用xfire,我这里使用的是myeclipse集成的xfire进行测试的

利用xfire开发WebService,可以有三种方法:

1一种是从javabean 中生成;

2 一种是从wsdl文件中生成;

3 还有一种是自己建立webservice

步骤如下:

用myeclipse建立webservice工程,目录结构如下:

首先建立webservice接口,

代码如下:

1package com.myeclipse.wsExample;

2//Generated by MyEclipse

3

4public interface IHelloWorldService {

5

6 public String example(String message);

7

8}

接着实现这个借口:

1package com.myeclipse.wsExample;

2//Generated by MyEclipse

3

4public class HelloWorldServiceImpl implements IHelloWorldService {

5

6 public String example(String message) {

7 return message;

8 }

9

10}

修改service.xml 文件,加入以下代码:

1service

2 nameHelloWorldService/name

3 serviceClass

4 com.myeclipse.wsExample.IHelloWorldService

5 /serviceClass

6 implementationClass

7 com.myeclipse.wsExample.HelloWorldServiceImpl

8 /implementationClass

9 stylewrapped/style

10 useliteral/use

11 scopeapplication/scope

12 /service

把整个项目部署到tomcat服务器中 ,打开浏览器,输入,可以看到如下:

然后再展开HelloWorldService后面的wsdl可以看到:

客户端实现如下:

1package com.myeclipse.wsExample.client;

2

3import java.net.MalformedURLException;

4import java.net.URL;

5

6import org.codehaus.xfire.XFireFactory;

7import org.codehaus.xfire.client.Client;

8import org.codehaus.xfire.client.XFireProxyFactory;

9import org.codehaus.xfire.service.Service;

10import org.codehaus.xfire.service.binding.ObjectServiceFactory;

11

12import com.myeclipse.wsExample.IHelloWorldService;

13

14public class HelloWorldClient {

15public static void main(String[] args) throws MalformedURLException, Exception {

16// TODO Auto-generated method stub

17Service s=new ObjectServiceFactory().create(IHelloWorldService.class);

18XFireProxyFactory xf=new XFireProxyFactory(XFireFactory.newInstance().getXFire());

19String url=””;

20

21 try

22 {

23

24 IHelloWorldService hs=(IHelloWorldService) xf.create(s,url);

25 String st=hs.example(“zhangjin”);

26 System.out.print(st);

27 }

28 catch(Exception e)

29 {

30 e.printStackTrace();

31 }

32 }

33

34}

35

这里再说点题外话,有时候我们知道一个wsdl地址,比如想用java客户端引用.net 做得webservice,使用myeclipse引用,但是却出现无法通过验证的错误,这时我们可以直接在类中引用,步骤如下:

1public static void main(String[] args) throws MalformedURLException, Exception {

2 // TODO Auto-generated method stub

3 Service s=new ObjectServiceFactory().create(IHelloWorldService.class);

4 XFireProxyFactory xf=new XFireProxyFactory(XFireFactory.newInstance().getXFire());

5

6

7//远程调用.net开发的webservice

8Client c=new Client(new URL(“”));

9 Object[] o=c.invoke(“qqCheckOnline”, new String[]{“531086641″,”591284436”});

10

11//调用.net本机开发的webservice

12Client c1=new Client(new URL(“”));

13Object[] o1=c1.invoke(“HelloWorld”,new String[]{});

14

15}

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月25日 00:16:34
下一篇 2024年3月25日 00:23:02

相关推荐

  • c调用javawebservice,c调用函数

    C# 调用Java的WebService(返回json格式数据),老是返回null, 求解… 1、c是字母符号。C(大写) 、c(小写)是英文字母顺数第三个,俄语字母顺数第19个。例如:英语单词cloud和“苏联”的俄语缩写СССР的第一个字母就是c。 2、c的意思:在化学中,表示碳的化学符号。在乐理中,表示:音阶中的C音,调号中于C音开始的音乐…

    2024年5月16日
    3400
  • javawebservice入门,java webservice开发

    软件开发都有哪些课程 首先要学习计算机基础课程,包括操作系统(体系结构)、计算机网络、算法设计、数据结构、编程语言基础、编译原理、数据库等内容。基础课程对于后续的学习是比较重要的,开发人员未来的成长高度在很大程度上取决于基础是否扎实。 软件开发专业需要学习多种软件和课程,其中包括:计算机硬件原理。学习计算机硬件的基本原理和组成,包括计算机体系结构、中央处理器…

    2024年5月16日
    3000
  • javawebservice发布,java发布webservice接口

    将java程序发布成webservice服务,运行就报错,求大神解决 http://10.1:9092/wstest/a/pws/hello?wsdl 一般浏览器不能直接访问WS程序,不过所有的WS都可以生成WSDL文档供一般浏览器访问,方式是在地址后面加上“?wsdl”即可。 一定是xml解析后的得到的内容有问题,可能使xmlString为空。 报错为连接…

    2024年5月14日
    3500
  • java事务和线程,java事务实现原理

    Java多线程问题总结? 单核CPU上所谓的”多线程”那是假的多线程,同一时间处理器只会处理一段逻辑,只不过线程之间切换得比较快,看着像多个线程”同时”运行罢了。 多线程程序都是并发处理的。如果CPU只有一个,那么并发处理就是顺序执行的,而如果有多个CPU,那么并发处理就可能会并行运行。等待队列 所有实例都拥有一个等待队列,它是在实例的wait方法执行后停止…

    2024年5月14日
    4800
  • java跨数据库事务,spring 跨库事务

    数据库中的事务,java中用哪些方法保证事务 那种是可以的,一般指定用 Transaction 指定一个service方法的事务,在service方法里面,只有出现异常(这个异常是可以指定的。),导致这个方法没有正常结束,这个就会数据库回滚。 Java种运用了大量的事务管理,就是对一系列的数据库操作进行统一的提交或回滚操作,比如说做一个转账功能,要更改帐户两…

    2024年5月13日
    3600
  • java事物的理解,java中的事务是什么

    Spring中的事务传播属性详解 传播属性为 SUPPORTS,如果没有事务,就以非事务的方式运行。表明两个方法都没有使用事务,没有事务的话,ab1 都添加成功。示例4 :mainTest 添加事务,设置传播属性为 REQUIRED。 NESTED :如果当前已经在一个事务中了,则嵌套在已有的事务中作为一个子事务。如果当前没在事务中则开启一个事务。内层事务结…

    2024年5月11日
    3900
  • ios调用javawebservice,ios调用h5方法

    IOS如何调用Java服务? mac系统只要安装了java环境就可以用。iOS系统不行。每个平台用自己的工具开发,例如Android用ADK,iOS用自己的那一套 Mac OS和Windows PC用Qt或者Java 不要搞所有平台都用同一套代码。 前往设置打开即可。因为你的浏览器调用java代码在浏览器端执行,这时候需要手机端有java的运行环境。 ios…

    2024年5月11日
    3000
  • redisjava事务回滚,redis事件循环

    Java培训的主要内容是什么? 如需java培训推荐选择【达内教育】,java培训要学习以下几点内容:Java基础:Java语言基础知识的学习和应用,Java使用技巧、集合框架与数据结构,数据库理论与应用、互联网网站及信息系统的开发与应用等。 【Java培训】具体内容如下:Java基础:Java语言基础知识的学习和应用Java使用技巧、集合框架与数据结构、信…

    2024年5月11日
    3000
  • java添加事务,java事务配置

    如何用java开启mysql事务,要求详细 1、加载JDBC驱动程序:在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过java.lang.Class类的静态方法forName(StringclassName)实现。 2、Java中使用事务处理,首先要求数据库支持事务。如使用MySQL的事务功能,就要求MySQL的表类型为I…

    2024年5月10日
    4200
  • java多线程事务未提交,java多线程事务未提交怎么办

    Java服务正常的关闭或者重启后有那些处理,未执行完的线程会怎样操作,会… 1、如果线程的调度策略是单线程执行,则线程会一直执行当前任务,直到完成为止,不会执行新的任务。如果线程的调度策略是多线程执行,则线程可能会在执行完当前任务后,执行新的任务。 2、(一).等待阻塞:运行(running)的线程执行o.wait()方法,JVM会把该线程放入等…

    2024年5月9日
    3400

发表回复

登录后才能评论



关注微信