Java 读取SOAP

本文介绍了如何使用Java调用SOAP服务。首先,通过部署Axis并创建HelloWorld.jws服务,然后解析WSDL文件获取服务信息。接着,创建Java客户端调用服务的方法,包括设置目标对象URI、方法名和参数。示例代码展示了如何无参数和带参数调用SOAP服务,并处理返回值。这是一个简单的SOAP服务调用入门示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   其实网上有关java如何调用soap的文章很多,只是有时我们看的时候不是很明了,所以我打算写一些java如何读取soap.

   首先,先安装上axis,将axis解压后的webapps下的axis复制到tomcats下的webapps,然后配置环境变量CATALINE_HOME和path的路径(这个网上有资料)。

   下面我们以HelloWorld为例写一个

   HelloWorld.jws   (注意这个后缀,并将其放在tomcats,中的axis文件夹下)

   public class HelloWorld

   {

           public String sayHello(String name){return name+"  say Hello to you guys";}

           public String say()  {return "Hello World";}

   }

ps:写两个function是主要给大家看看带参数和不带参数

 写好之后,我们启动tomcat,在地址栏中输入: http://localhost:8080/axis/HelloWorld.jws?wsdl 

  注意,这个文件很重要,你要看懂这个文件的大概意思。

    <wsdl:service name="HelloWorldService">

              <wsdl:port binding="intf:HelloWorldSoapBinding" name="HelloWorld">

        < wsdlsoap:address location =" http://localhost:8080/axis/HelloWorld.jws " />
      </ wsdl:port >
  </ wsdl:service >
这个说明他的service name是HelloWorldService,这个文件在后面的client-side的代码的参考价值很大。
然后,你在地址栏输入http://localhost:8080/axis/HelloWorld.jws?method=say , 得到大概如下:
<?xml version="1.0" encoding="UTF-8" ?>
- < soapenv:Envelope xmlns:soapenv =" http://schemas.xmlsoap.org/soap/envelope/ " xmlns:xsd =" http://www.w3.org/2001/XMLSchema " xmlns:xsi =" http://www.w3.org/2001/XMLSchema-instance " >
- < soapenv:Body >
- < helloResponse soapenv:encodingStyle =" http://schemas.xmlsoap.org/soap/encoding/ " >
  < helloReturn xsi:type =" xsd:string " > hello World </ helloReturn >
  </ helloResponse >
  </ soapenv:Body >
  </ soapenv:Envelope >

这上面其实是非常非常简单。只要写个一HelloWorld.jws,tomcat就帮你完成一切。

下面我们要使用java来调用

 

public class ClientSide

{

        public static void main(String[] args )

        {

              URL url=new URL(http://localhost:8080/axis/HelloWorld.jws?);  //这个是你要调用service 的路径

              Call call=new Call();  

              call.setTargetObjectURI("HelloWorldService");  //这个HelloWorldService,就是我们<wsdl:service                 

                                                                                   name="HelloWorldService"相对应的!

              call.setMethodName("say");    //这个say也是在  http://localhost:8080/axis/HelloWorld.jws?wsdl

                                                         中的<wsdl:operation name="say">

              call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
              Response rep=call.invoke(url, "");
              System.out.println(rep.getReturnValue().getValue().toString());

              //为了健壮性起见,你可以加Fault的判断来判断是否出现错误。如下

          //    if(rep.generatedFault())
         //    {
          //          Fault fault=rep.getFault();
          //         System.out.println("Code :"+fault.getFaultCode());
         //         System.out.println("String: "+fault.getFaultString());
        //     }
        //     else
        //    {
          //        System.out.println(rep.getReturnValue().getValue().toString());
        //    }

              //以上为没有参数的情况如果有参数,其实也是很简单

              Vector<Parameter> vector=new Vector<Parameter>();   //这是因为call.setParams(); 要求的是Vector类型

              vector.addElement(new Parameter("name",String.class,"michael",null));  //这里要注意的是"name",就是

                                                          public String sayHello(String name)中的name的参数命!

              call.setParams(vector); //下面代码一致,ok这样就完成soap的读取了。

        }

}

 

当然,这只是一个小小的示范例子。不完善之处,还请大家指出。

-  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值