如何调用webservice接口,第1张

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

1、编写代码方式:

package comyuduntest;

import javarmiRemoteException;

import orgapacheaxisclientCall;

import orgapacheaxisclientService;

import orgapacheaxismessagePrefixedQName;

import orgapacheaxismessageSOAPHeaderElement;

import comcezannegoldenuserException;

import comcezannegoldenuserUserManagerServiceProxy;

import javaxxmlnamespaceQName;

import javanetMalformedURLException;

import javaxxmlrpcServiceException;

import javaxxmlsoapName;

import javaxxmlsoapSOAPException;

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) servicecreateCall();

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

callsetTargetEndpointAddress( new javanetURL(endpoint) );//为Call设置服务的位置

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

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

orgapacheaxismessageSOAPHeaderElement header = new SOAPHeaderElement(headerName);

headeraddTextNode( "blablabla" );

calladdHeader(header);

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

// soapHeaderElementsetNamespaceURI("发布的wsdl里的targetNamespace里的url");

// try

// {

// soapHeaderElementaddChildElement("string_itemName")setValue("blablabla");

// }

// catch (SOAPException e)

// {

// eprintStackTrace();

// }

// calladdHeader(soapHeaderElement);

//调用Web Service的方法

orgapacheaxisdescriptionOperationDesc oper;

orgapacheaxisdescriptionParameterDesc param;

oper = new orgapacheaxisdescriptionOperationDesc();

opersetName("opName");

param = new orgapacheaxisdescriptionParameterDesc(new javaxxmlnamespaceQName("", "arg0"), orgapacheaxisdescriptionParameterDescIN, new javaxxmlnamespaceQName("http://wwww3org/2001/XMLSchema", "string"), javalangStringclass, false, false);

paramsetOmittable(true);

operaddParameter(param);

param = new orgapacheaxisdescriptionParameterDesc(new javaxxmlnamespaceQName("", "arg1"), orgapacheaxisdescriptionParameterDescIN, new javaxxmlnamespaceQName("http://wwww3org/2001/XMLSchema", "string"), javalangStringclass, false, false);

paramsetOmittable(true);

operaddParameter(param);

param = new orgapacheaxisdescriptionParameterDesc(new javaxxmlnamespaceQName("", "arg2"), orgapacheaxisdescriptionParameterDescIN, new javaxxmlnamespaceQName("http://wwww3org/2001/XMLSchema", "string"), javalangStringclass, false, false);

paramsetOmittable(true);

operaddParameter(param);

opersetReturnType(new javaxxmlnamespaceQName("http://wwww3org/2001/XMLSchema", "string"));

opersetReturnClass(javalangStringclass);

opersetReturnQName(new javaxxmlnamespaceQName("", "return"));

opersetStyle(orgapacheaxisconstantsStyleWRAPPED);

opersetUse(orgapacheaxisconstantsUseLITERAL);

operaddFault(new orgapacheaxisdescriptionFaultDesc(

new javaxxmlnamespaceQName("发布的wsdl里的targetNamespace里的url", "Exception"),

"Exception",

new javaxxmlnamespaceQName("发布的wsdl里的targetNamespace里的url", "Exception"),

true

));

callsetOperation( oper );

callsetOperationName(new javaxxmlnamespaceQName("发布的wsdl里的targetNamespace里的url", "opName"));

//调用Web Service,传入参数

String res = ( String ) callinvoke( new Object[]("arg0","arg1"));

Systemoutprintln("===============");

return res;

}

/

@param args

/

public static void main(String[] args) {

try {

Systemoutprintln(getResult());

} catch (MalformedURLException e) {

eprintStackTrace();

} catch (RemoteException e) {

eprintStackTrace();

} catch (ServiceException e) {

eprintStackTrace();

} catch (SOAPException e) {

eprintStackTrace();

}

}

}

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 = umspopMethod("arg0","arg1");

Systemoutprintln(resultStr);

} catch (Exception e) {

Systemoutprintln("异常");

eprintStackTrace();

} catch (RemoteException e) {

Systemoutprintln("RemoteException异常");

eprintStackTrace();

}

目前对JavaWeb的理解是:用一次提交过程来表示,当点击一个提交的标签<input>。会将url传到tomcat服务器,在tomcat的配置文件中找到管理javaweb项目的配置文件serverxml,在serverxml中配置管理web项目的路径。从当前web项目的路径中找到webxml文件(webxml文件是配置servlet的内容,把网络请求和响应的信息都是放在servlet中的service方法里处理)。在servlet中创建ServletRequest对象和ServletResponse对象,并调用service方法,在service方法中对浏览器做出响应操作。

1:浏览器发出请求: http://localhost:80/day11/hello

2:解析请求信息:

http:协议

localhost:找互联网上的哪一台主机

80: 从主机中找到对应80端口的程序--->Tomcat服务器

/day11: 当期项目的上下文路径

/hello: 当期请求的资源名

3:找到Tomcat根/config/serverxml文件

解析serverxml文件:

判断获取哪一个<Context/>元素的path属性为day11

若找不到:404错误

若 找到:解析该<Context/>元素,得到docBase属性,获取当期访问Web项目的根的绝对路径:

H:\javaPros\Servlet\webapp

4:从H:\javaPros\Servlet\webapp下的WEB-INF下找到webxml文件

判断webxml中是否有<url-pattern>的文本内容为/hello

若找不到:404错误

若 找到:继而可以获取该资源对应Servlet类的全限定名称:com_520it_01_helloHelloServlet

5:判断Servlet实例缓存池中是否有

com_520it_01_helloHelloServlet的对象

Map<String,Servlet> cache = (Tomcat提供的);

key:存Servlet类的全限定名称

value:该Servlet类的对象

Servlet obj = cacheget("com_520it_01_helloHelloServlet");

if(obj==null){

//Servlet实例缓存中没有该类的对象,第一次

GOTO 6:

}else{

//有对象,非第一次

GOTO 8:

}

6:使用反射调用构造器,创建对象

obj = ClassforName("com_520it_01_helloHelloServlet")newInstance();

把当前创建的Servlet对象,存放在缓存之中,供下次使用

cacheput("com_520it_01_helloHelloServlet",obj);

7:创建ServletConfig对象,并调用init方法

objinit(config);

8:创建ServletRequest对象和ServletResponse对象,并调用service方法

objservice(req,resp);

9:在service方法中对浏览器做出响应操作

调用方法大致有三种方法:

1)使用,直接AXIS调用远程的web service

2)直接SOAP调用远程的webservice

3)使用wsdl2java把WSDL文件转成本地类,然后像本地类一样使用,即可。

我一般使用第三种,挺简单的:

比如webservice的代码如下:

@WebService

public class ServiceHello {

/

供客户端调用的方法

@param name

@return String

/

public String getValue(String name){

return "我叫"+name;

}

public static void main(String[] args) {

// TODO Auto-generated method stub

Endpointpublish("http://localhost:9001/Service/ServiceHello", new ServiceHello());

Systemoutprintln("service success!");

}

}

1)先建立客户端webservice项目,使用命令将WSDL文件转成本地类,比如:

C:\Users\aiher\Workspaces\MyEclipse 2015\TheClient\src>wsimport -s -p comhyanclient -keep http://localhost:9001/Service/ServiceHellowsdl

2)编写客户端测试类,调用服务端web service接口的某个方法,如下:

public class ServiceTest {

public static void main(String[] args) {

// TODO Auto-generated method stub

ServiceHello hello = new ServiceHelloService()getServiceHelloPort();

String name = hellogetValue("Hyan");

Systemoutprintln("name-:"+name);

}

}

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 如何调用webservice接口

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情