来自 计算机编程 2020-01-31 19:06 的文章
当前位置: 澳门威尼斯人平台 > 计算机编程 > 正文

java学习:调用 java web service

c# JSON返回格式的WEB SERVICE
我这里是利用axis创建类包的,首先下载axis的压缩包,然后解压,把axis放到webapp下面。如果可以运行,就OK了。
  c#创建的webservice自带的wsdl的,直接可以加上?wsdl访问,然后利用axis生成类:

先写一个java的class:AwbModel(相当于要在web service中传输的实体对象)

这篇文章介绍一下如何在java中发布WEB SERVICE

一、序言

java -classpath ".;commons-logging.jar;axis.jar;commons-discovery.jar;jaxrpc.jar;wsdl4j.jar;saaj.jar;jaxrpc.jar;mail.jar" org.apache.axis.wsdl.WSDL2Java -o "E:cjjer" 

package webservicesample;

public class AwbModel {

    private String _a1 = "_a1";
    public String getA1() {
        return _a1;
    }

    public void setA1(String value) {
        this._a1 = value;
    }

    private String _A2 = "_A2";
    public String getA2() {
        return _A2;
    }

    public void setA2(String value) {
        this._A2 = value;
    }


    private String a3 = "a3";
    public String getA3() {
        return a3;
    }

    public void setA3(String value) {
        this.a3 = value;
    }


    private String A4 = "A4";
    public String getA4() {
        return A4;
    }

    public void setA4(String value) {
        this.A4 = value;
    }


    private String A5 = "A5";
    public String getA5() {
        return A5;
    }

    private String A6 = "A6";
    public void setA6(String value) {
        this.A6 = value;
    }


    public String A7 = "A7";

    //private String _a8="a8";

    public String get_a8(){
        //return _a8;
        return "";
    }

    public void set_a8(String value){
        //this._a8=value;
    }

    public String sayHelloA(){
        return "Hello!";
    }


}

在java程序发布web serice 可以使用几种开源的产品如:

  大家或多或少都听过WebService(Web服务),有一段时间很多计算机期刊、书籍和网站都大肆的提及和宣传WebService技术,其中不乏很多吹嘘和做广告的成分。但是不得不承认的是WebService真的是一门新兴和有前途的技术,那么WebService到底是什么?何时应该用?

在目录E:cjjer下面有产生了一系列的java文件。

  然后再写一个Awb类(相当于web service的接口+实现)

AXIS,XFIRE,CXF。现在CXF应该可以取代XFIRE作为首选的WEB SERVICE 发布产品。

   当前的应用程序开发逐步的呈现了两种迥然不同的倾向:一种是基于浏览器的瘦客户端应用程序,一种是基于浏览器的富客户端应用程序(RIA),当然后一种技术相对来说更加的时髦一些(如现在很流行的HTML5技术),这里主要讲前者。

  然后编译这些java文件,注意,由于这样产生的并没有soapheader的请求,需要自己修改java文件:

package webservicesample;

public class Awb {
    public AwbModel GetAwbModelByNo() {
        AwbModel a = new AwbModel();
        a.setA1("a1_new");
        return a;
    }


    private String _b1 = "_b1";
    public String getB1() {
        return _b1;
    }

    public void setB1(String value) {
        this._b1 = value;
    }

    private String _B2 = "_B2";
    public String getB2() {
        return _B2;
    }

    public void setB2(String value) {
        this._B2 = value;
    }


    private String b3 = "b3";
    public String getB3() {
        return b3;
    }

    public void setB3(String value) {
        this.b3 = value;
    }


    private String B4 = "B4";
    public String getB4() {
        return B4;
    }

    public void setB4(String value) {
        this.B4 = value;
    }


    private String B5 = "B5";
    public String getB5() {
        return B5;
    }

    private String B6 = "B6";
    public void setB6(String value) {
        this.B6 = value;
    }


    public String B7 = "B7";


    public String sayHelloB() {
        return "Hello B!";
    }

}

下面介绍一下如何使用CXF发布一个web service。

   基于浏览器的瘦客户端应用程序并不是因为瘦客户能够提供更好的用户界面,而是因为它能够避免花在桌面应用程序发布上的高成本。发布桌面应用程序成本很高,一半是因为应用程序安装和配置的问题,另一半是因为客户和服务器之间通信的问题。传统的Windows富客户应用程序使用DCOM来与服务器进行通信和调用远程对象。配置好DCOM使其在一个大型的网络中正常工作将是一个极富挑战性的工作,同时也是许多IT工程师的噩梦。事实上,许多IT工程师宁愿忍受浏览器所带来的功能限制,也不愿在局域网上去运行一个DCOM。关于客户端与服务器的通信问题,一个完美的解决方法是使用HTTP协议来通信。这是因为任何运行Web浏览器的机器都在使用HTTP协议。同时,当前许多防火墙也配置为只允许HTTP连接。许多商用程序还面临另一个问题,那就是与其他程序的互操作性。如果所有的应用程序都是使用COM或.NET语言写的,并且都运行在Windows平台上,那就天下太平了。然而,事实上大多数商业数据仍然在大型主机上以非关系文件(VSAM)的形式存放,并由COBOL语言编写的大型机程序访问。而且,目前还有很多商用程序继续在使用C++、Java、Visual Basic和其他各种各样的语言编写。现在,除了最简单的程序之外,所有的应用程序都需要与运行在其他异构平台上的应用程序集成并进行数据交换。这样的任务通常都是由特殊的方法,如文件传输和分析,消息队列,还有仅适用于某些情况的的API,如IBM的高级程序到程序交流(APPC)等来完成的。在以前,没有一个应用程序通信标准,是独立于平台、组建模型和编程语言的。只有通过Web Service,客户端和服务器才能够自由的用HTTP进行通信,不论两个程序的平台和编程语言是什么。

  打开*SoapStub.java这个文件,定位到

 jBuilder2006环境下,封装成web service发布到weblogic后,WSDL的内容见下图:

1.下载CXF。

 

    protected org.apache.axis.client.Call createCall() throws java.rmi.RemoteException 

图片 1

在  下载cxf软件。

二、WebService到底是什么?

这个方法,然后再return之前写上

 

2.新建一个web项目。

   一言以蔽之:WebService是一种跨编程语言和跨操作系统平台的远程调用技术。

              SOAPHeaderElement   head   =   new   SOAPHeaderElement(new   PrefixedQName(new   javax.xml.namespace.QName("",   "ReqHeader")));   
              head.setActor(null);   
              try{   
              head.addChildElement("userName").addTextNode("cjjer");   
              head.addChildElement("password").addTextNode("000000");   
              head.setMustUnderstand(true);
              }catch(Exception   e){   
              System.out.println("   soapheader   Exception   ==   ");   
              e.printStackTrace();   
              }   
              _call.addHeader(head);   

注意:因为A5只有get方法,A6只有set方法,最终生成的WSDL自动去掉了这二个“属性”(后面在用c#调用该java web Service时,能看到这将会生成真正意义上的.net property),自定义的其它方法(比如sayHelloA)被丢弃(即:这类方法没有自动序列化),同时比较有意思的是"_a8",AwbModel.java里只定义了set_a8(String value),get_a8()方法,根本没有声明_a8的private变量,但是java自动视为已经存在“_a8”的私有成员;此外直接声明的public变量,WSDL里不改变大小写,仍然还是A7;而其它的setXXX,getXXX方法,最终一律去掉set/get后,将首字母小写,即xXX。

添加如下包的引用。

   所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则可以采用其他编程语言编写,反之亦然!跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统上运行。

            return _call;

类似vs.net里添加服务引用后,会自动生成xxxClient、xxxChannel、代理类等客户端调用代码一样,make之后,jBuilder也会生成客户端代码示例包Awb_Client.jar,解压后看下AwbModel.java的内容:

 

    所谓远程调用,就是一台计算机a上的一个程序可以调用到另外一台计算机b上的一个对象的方法,譬如,银联提供给商场的pos刷卡系统,商场的POS机转账调用的转账方法的代码其实是跑在银行服务器上。再比如,amazon,天气预报系统,淘宝网,校内网,百度等把自己的系统服务以webservice服务的形式暴露出来,让第三方网站和程序可以调用这些服务功能,这样扩展了自己系统的市场占有率,往大的概念上吹,就是所谓的SOA应用。

这样,就会加上SoapHeader了。提示类找不到的话请import org.apache.axis.message.*;

/**
 * This code was automatically generated at 5:48:57 on 2012-12-4
 * by weblogic.xml.schema.binding.internal.codegen.BeanImplGenerator -- do not edit.
 *
 * @version WebLogic Server 9.2 SP0  Mon Jul 31 05:48:10 PDT 2006 796124 
 * @author Copyright (c) 2012 by BEA Systems, Inc. All Rights Reserved.
 */

package webservicesample.generated;

// original type: ['java:webservicesample']:AwbModel


public  class AwbModel 

  implements java.io.Serializable
{

  public AwbModel() {}

  public AwbModel(java.lang.String p__A8
,     java.lang.String p_a1
,     java.lang.String p_a2
,     java.lang.String p_a3
,     java.lang.String p_a4
,     java.lang.String p_a7) 
  {
     this._A8 = p__A8;

     this.a1 = p_a1;

     this.a2 = p_a2;

     this.a3 = p_a3;

     this.a4 = p_a4;

     this.a7 = p_a7;


  }


  private java.lang.String _A8 ;

  /**
  <br>  Derived from _a8.

  <br>  schema name = ['java:webservicesample']:_a8
  <br>  schema type = ['http://www.w3.org/2001/XMLSchema']:string
  <br>  schema formQualified = true
  */
  public java.lang.String get_A8() {
    return _A8;
  }



  public void set_A8(java.lang.String v) {

    this._A8 = v;

  }



  private java.lang.String a1 ;

  /**
  <br>  Derived from a1.

  <br>  schema name = ['java:webservicesample']:a1
  <br>  schema type = ['http://www.w3.org/2001/XMLSchema']:string
  <br>  schema formQualified = true
  */
  public java.lang.String getA1() {
    return a1;
  }



  public void setA1(java.lang.String v) {

    this.a1 = v;

  }



  private java.lang.String a2 ;

  /**
  <br>  Derived from a2.

  <br>  schema name = ['java:webservicesample']:a2
  <br>  schema type = ['http://www.w3.org/2001/XMLSchema']:string
  <br>  schema formQualified = true
  */
  public java.lang.String getA2() {
    return a2;
  }



  public void setA2(java.lang.String v) {

    this.a2 = v;

  }


  private java.lang.String a3 ;

  /**
  <br>  Derived from a3.

  <br>  schema name = ['java:webservicesample']:a3
  <br>  schema type = ['http://www.w3.org/2001/XMLSchema']:string
  <br>  schema formQualified = true
  */
  public java.lang.String getA3() {
    return a3;
  }



  public void setA3(java.lang.String v) {

    this.a3 = v;

  }



  private java.lang.String a4 ;

  /**
  <br>  Derived from a4.

  <br>  schema name = ['java:webservicesample']:a4
  <br>  schema type = ['http://www.w3.org/2001/XMLSchema']:string
  <br>  schema formQualified = true
  */
  public java.lang.String getA4() {
    return a4;
  }



  public void setA4(java.lang.String v) {

    this.a4 = v;

  }



  private java.lang.String a7 ;

  /**
  <br>  Derived from A7.

  <br>  schema name = ['java:webservicesample']:A7
  <br>  schema type = ['http://www.w3.org/2001/XMLSchema']:string
  <br>  schema formQualified = true
  */
  public java.lang.String getA7() {
    return a7;
  }



  public void setA7(java.lang.String v) {

    this.a7 = v;

  }



  public java.lang.String toString() {
  return "AwbModel" + "{"
             + " _A8=<" + get_A8() + ">"
             + " a1=<" + getA1() + ">"
             + " a2=<" + getA2() + ">"
             + " a3=<" + getA3() + ">"
             + " a4=<" + getA4() + ">"
             + " a7=<" + getA7() + ">"

    + " }";
  }

  public boolean equals(java.lang.Object __other__) {
    if (__other__ == this) return true;

    if (__other__ instanceof AwbModel) {

      AwbModel __obj__ =  (AwbModel) __other__;


      return true
            && (_A8==null ? __obj__.get_A8()==null : _A8.equals(__obj__.get_A8()))
            && (a1==null ? __obj__.getA1()==null : a1.equals(__obj__.getA1()))
            && (a2==null ? __obj__.getA2()==null : a2.equals(__obj__.getA2()))
            && (a3==null ? __obj__.getA3()==null : a3.equals(__obj__.getA3()))
            && (a4==null ? __obj__.getA4()==null : a4.equals(__obj__.getA4()))
            && (a7==null ? __obj__.getA7()==null : a7.equals(__obj__.getA7()))


      ; 
    }
    return false;
  }

  public int hashCode() {
    int __hash__result__ = 17;

    __hash__result__ = 37*__hash__result__ + (_A8==null ? 0 : _A8.hashCode()) ;
    __hash__result__ = 37*__hash__result__ + (a1==null ? 0 : a1.hashCode()) ;
    __hash__result__ = 37*__hash__result__ + (a2==null ? 0 : a2.hashCode()) ;
    __hash__result__ = 37*__hash__result__ + (a3==null ? 0 : a3.hashCode()) ;
    __hash__result__ = 37*__hash__result__ + (a4==null ? 0 : a4.hashCode()) ;
    __hash__result__ = 37*__hash__result__ + (a7==null ? 0 : a7.hashCode()) ;


    return __hash__result__;
  }

}

图片 2图片 3代码

   其实可以从多个角度来理解WebService,从表面上看,WebService就是一个应用程序向外界暴露出一个能通过Web进行调用的API,也就是说能用编程的方法通过Web来调用这个应用程序。我们把调用这个WebService的应用程序叫做客户端,而把提供这个WebService的应用程序叫做服务端。从深层次看,WebService是建立可互操作的分布式应用程序的新平台,是一个平台,是一套标准。它定义了应用程序如何在Web上实现互操作性,你可以用任何你喜欢的语言,在任何你喜欢的平台上写Web service ,只要我们可以通过Web service标准对这些服务进行查询和访问。 

最后是编写请求代码了:

  

commons-logging-1.1.jar
geronimo-activation_1.1_spec-1.0-M1.jar (or Sun's Activation jar)
geronimo-annotation_1.0_spec-1.1.jar (JSR 250)
geronimo-javamail_1.4_spec-1.0-M1.jar (or Sun's JavaMail jar)
geronimo-servlet_2.5_spec-1.1-M1.jar (or Sun's Servlet jar)
geronimo-ws-metadata_2.0_spec-1.1.1.jar (JSR 181)
jaxb-api-2.0.jar
jaxb-impl-2.0.5.jar
jaxws-api-2.0.jar
neethi-2.0.jar
saaj-api-1.3.jar
saaj-impl-1.3.jar
stax-api-1.0.1.jar
wsdl4j-1.6.1.jar
wstx-asl-3.2.1.jar
XmlSchema-1.2.jar
xml-resolver-1.2.jar

   WebService平台需要一套协议来实现分布式应用程序的创建。任何平台都有它的数据表示方法和类型系统。要实现互操作性,WebService平台必须提供一套标准的类型系统,用于沟通不同平台、编程语言和组件模型中的不同类型系统。Web service平台必须提供一种标准来描述Web service,让客户可以得到足够的信息来调用这个Web service。最后,我们还必须有一种方法来对这个Web service进行远程调用,这种方法实际是一种远程过程调用协议(RPC)。为了达到互操作性,这种RPC协议还必须与平台和编程语言无关。

import java.io.*; 
import java.sql.*; 
import java.awt.*; 
import javax.xml.namespace.*; 
import java.awt.event.*; 
import java.net.URL;
import org.apache.axis.client.*;
import com.cjjer.www.webs.*;

与WSDL里看到的基本一致,不过跟原始的AwbModel.java相比,还是有一些有趣的小变化:原始AwbModel.java里定义的私成成员,一律变成了小写,而自动添加的"_A8"却又是大写。

spring 的包
aopalliance-1.0.jar
spring-core-2.0.8.jar
spring-beans-2.0.8.jar
spring-context-2.0.8.jar
spring-web-2.0.8.jar

 

public class TestNet { 
// main method 
public static void main(String args[]) { 
    System.out.println("我要进来了,嘎嘎"); 
    try{
        String endpoint= "";
        cjjerLocator locator = new  cjjerLocator();//
        locator.setMaintainSession(true);
        cjjerSoap service = locator.getcjjerSoap();//获得服务对象
        Member objM= service.getUser(1);
        System.out.println(objM.getName());
        }
        catch (Exception e) {
            e.printStackTrace();

下面看看用java如何调用web service:

cxf 的包
cxf-2.1.jar

三、WebService平台技术

本文由澳门威尼斯人平台发布于计算机编程,转载请注明出处:java学习:调用 java web service

关键词: