Java调用wsdl,怎么实现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java调用wsdl,怎么实现相关的知识,希望对你有一定的参考价值。

java调用wsdl的步骤如下,主要是使用第三方框架:

步骤如下:

1.下载AXIS2类库,AXIS2是目前java调用webservice的一个主要方法(由于更新较频繁,请自行google该类库的网址)

2.由于是第三方webservice,直接引入AXIS2的包就可以用了,代码如下: 

import java.rmi.RemoteException;
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;
 
public class webServiceTest 
    public String invokeRemoteFuc() 
        String endpoint = "http://localhost:8080/webservice/services/helloworld";
        String result = "no result!";
        Service service = new Service();
        Call call;
        Object[] object = new Object[1];
        object[0] = "Dear I miss you";//Object是用来存储方法的参数
        try 
            call = (Call) service.createCall();
            call.setTargetEndpointAddress(endpoint);// 远程调用路径
            call.setOperationName("say");// 调用的方法名
 
            // 设置参数名:
            call.addParameter("str1", // 参数名
                    XMLType.XSD_STRING,// 参数类型:String
                    ParameterMode.IN);// 参数模式:\'IN\' or \'OUT\'
 
            // 设置返回值类型:
            call.setReturnType(XMLType.XSD_STRING);// 返回值类型:String         
 
            result = (String) call.invoke(object);// 远程调用
         catch (ServiceException e) 
            e.printStackTrace();
         catch (RemoteException e) 
            e.printStackTrace();
        
        return result;
    
 
    public static void main(String[] args) 
        webServiceTest t = new webServiceTest();
        String result = t.invokeRemoteFuc();
        System.out.println(result);
    

该方法的原理很简单,通过AXIS2封装好的类设置URL和参数,直接调用就好了,我们要关注的就是设置URL,方法,还有方法的参数,其他的copy&paste好啦,很简单吧,再看看其他的方法,我勒个去了,害我瞎搞两天。迟点上个源码共大家参考!

参考技术A 步骤如下:

1.下载AXIS2类库,AXIS2是目前java调用webservice的一个主要方法(由于更新较频繁,请自行google该类库的网址)

2.由于是第三方webservice,直接引入AXIS2的包就可以
代码如下:

import java.rmi.RemoteException;
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;

public class webServiceTest
public String invokeRemoteFuc()
String endpoint = "http://localhost:8080/webservice/services/helloworld";
String result = "no result!";
Service service = new Service();//新建一个service
Call call;
Object[] object = new Object[1];
object[0] = "Dear I miss you";//Object是用来存储方法的参数
try
call = (Call) service.createCall();
call.setTargetEndpointAddress(endpoint);// 远程调用路径
call.setOperationName("say");// 调用的方法名

// 设置参数名:
call.addParameter("str1", // 参数名
XMLType.XSD_STRING,// 参数类型:String
ParameterMode.IN);// 参数模式:'IN' or 'OUT'

// 设置返回值类型:
call.setReturnType(XMLType.XSD_STRING);// 返回值类型:String

result = (String) call.invoke(object);// 远程调用
catch (ServiceException e)
e.printStackTrace();
catch (RemoteException e)
e.printStackTrace();

return result;//返回值


public static void main(String[] args)
webServiceTest t = new webServiceTest();

String result = t.invokeRemoteFuc();
System.out.println(result); //输出




通过AXIS2封装好的类设置URL和参数,直接调用。
参考技术B 导入axis的八个包:
axis.jar
commons-discovery.jar
commons-logging.jar
jaxrpc.jar
saaj.jar
wsdl4j.jar
axis-ant.jar
log4j-1.2.8.jar

开发客户端程序。开发客户端程序的项目中要加入axis.jar包。
文件:TestWebService.java
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
public class TestWebService
public static void main(String[] args)
try
//还记得刚才的那个WebService的services.xml中的namespace吗?
String endpoint = "http://localhost:8080/uum/services/Hello.jws?wsdl";
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(endpoint));
call.setOperationName("GetName"); // 这里是的Hello类中的方法名(注意大小写)
call.setReturnType(XMLType.XSD_STRING); // 返回值类型。
call.addParameter("name",org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);
String[] str= "张三";
Object[] o = str;
//Object[] o =null;//如果你的方法中没有参数,那么就这样写吧。
String hello = (String) call.invoke(o);// 做方法执行。
System.out.println(hello);
catch (Exception e)
System.err.println(e.toString());



执行这段代码,将会在命令行中输出 “hello 张三”,表示测试成功。

Axis下载地址为http://ws.apache.org/axis/

这个就是web service框架,学一下这个例子就会了追答

亲,记得采纳哦

本回答被提问者和网友采纳

怎么用Java通过wsdl地址调用WebService求代码

    webservice 使用说明书,就是wsdl.

    wsdl说明是是基于xml格式的

    通过wsdl说明书,就可以完整的描述一个服务端对外发布的服务

    生成客户端调用代码:

    语法1:  wsimport -s . wsdl说明书地址

    语法2:wsimport  -keep -p 包名称  wsdl说明书地址

    直接用cmd控制调用上面代码,把生成的代码直接复制到你的项目中,就可以使用了

参考技术A 这里有三种方法你可以使用,不过你先要下载相应的jar包。
http://www.cnblogs.com/sun_moon_earth/archive/2009/02/03/1383308.html本回答被提问者采纳
参考技术B 给不了啊,要根据wsdl协议生成。不同的协议对应的代码是不一样的。 参考技术C JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(RService.class);
factory.setAddress(URL);
RService rService = (RService) factory.create();
Result result = rService.execute("f", elements);

以上是关于Java调用wsdl,怎么实现的主要内容,如果未能解决你的问题,请参考以下文章

怎样调用java的webservice,wsdl怎样生成java代码

怎么用Java通过wsdl地址调用WebService求代码

java web项目怎么使用wsdl文件

java调用webservice访问时,有iis认证怎么解决

java 项目怎么调用.net写的webService,求源码。

java cxf动态调用服务端的webservices方法