java学习:调用 java web service

简介: 先写一个java的class:AwbModel(相当于要在web service中传输的实体对象) package webservicesample; public class AwbModel { private String _a1 = "_a1"; publ...

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

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!";
    }


}

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

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!";
    }

}

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

 

注意:因为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。

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

/**
 * 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__;
  }

}

  

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

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

随便新建一个java项目,把jBuilder自动生成的Awb_client.jar包引用进来

package jmyang.web_service_call;

import webservicesample.generated.*;
import java.io.IOException;
import javax.xml.rpc.ServiceException;

public class wsCallDemo {

    public void callService() {
        String wsdlUrl = "http://127.0.0.1:7001/MyWebService/Awb?WSDL";
        try {
            Awb service = new Awb_Impl(wsdlUrl);
            AwbPort port = service.getAwbPort();
            AwbModel result = port.getAwbModelByNo();
            System.out.println("awbmodel.a1=" + result.getA1());
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ServiceException e2) {
            e2.printStackTrace();
        }
    }
}

  

这样就能调用了.

.net当然也能调用java写的web service,在vs.net里添加服务引用,服务地址输入:http://127.0.0.1:7001/MyWebService/Awb?WSDL vs.net会象添加wcf/asmx服务引用一样,自动生成代理类等其它代码,看看自动生成的AwbModel类

 /// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.225")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.SoapTypeAttribute(Namespace="java:webservicesample")]
    public partial class AwbModel : object, System.ComponentModel.INotifyPropertyChanged {
        
        private string _a8Field;
        
        private string a1Field;
        
        private string a2Field;
        
        private string a3Field;
        
        private string a4Field;
        
        private string a7Field;
        
        /// <remarks/>
        [System.Xml.Serialization.SoapElementAttribute(IsNullable=true)]
        public string _a8 {
            get {
                return this._a8Field;
            }
            set {
                this._a8Field = value;
                this.RaisePropertyChanged("_a8");
            }
        }
        
        /// <remarks/>
        [System.Xml.Serialization.SoapElementAttribute(IsNullable=true)]
        public string a1 {
            get {
                return this.a1Field;
            }
            set {
                this.a1Field = value;
                this.RaisePropertyChanged("a1");
            }
        }
        
        /// <remarks/>
        [System.Xml.Serialization.SoapElementAttribute(IsNullable=true)]
        public string a2 {
            get {
                return this.a2Field;
            }
            set {
                this.a2Field = value;
                this.RaisePropertyChanged("a2");
            }
        }
        
        /// <remarks/>
        [System.Xml.Serialization.SoapElementAttribute(IsNullable=true)]
        public string a3 {
            get {
                return this.a3Field;
            }
            set {
                this.a3Field = value;
                this.RaisePropertyChanged("a3");
            }
        }
        
        /// <remarks/>
        [System.Xml.Serialization.SoapElementAttribute(IsNullable=true)]
        public string a4 {
            get {
                return this.a4Field;
            }
            set {
                this.a4Field = value;
                this.RaisePropertyChanged("a4");
            }
        }
        
        /// <remarks/>
        [System.Xml.Serialization.SoapElementAttribute(IsNullable=true)]
        public string A7 {
            get {
                return this.a7Field;
            }
            set {
                this.a7Field = value;
                this.RaisePropertyChanged("A7");
            }
        }
        
        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
        
        protected void RaisePropertyChanged(string propertyName) {
            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
            if ((propertyChanged != null)) {
                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
            }
        }
    }

  

可以发现,刚才截图里的a1、a2、a3、a4、A7、_a8全都以属性(property)的方式出现了。

c#的调用代码还是一如继往的简单:

            using (YJM.AwbPortClient client = new AwbPortClient())
            {
                var model = client.GetAwbModelByNo();
                Console.WriteLine("a1=" + model.a1);
                Console.WriteLine("a2=" + model.a2);
                Console.WriteLine("a3=" + model.a3);
                Console.WriteLine("a4=" + model.a4);
                Console.WriteLine("A7=" + model.A7);
                Console.WriteLine("_a8=" + model._a8);
                Console.Read();
            }

  

目录
相关文章
|
3月前
|
安全 关系型数据库 测试技术
学习Python Web开发的安全测试需要具备哪些知识?
学习Python Web开发的安全测试需要具备哪些知识?
121 61
|
21天前
|
安全 Java 数据安全/隐私保护
springSecurity学习之springSecurity过滤web请求
通过配置 Spring Security 的过滤器链,开发者可以灵活地管理 Web 请求的安全性。理解核心过滤器的作用以及如何配置和组合这些过滤器,可以帮助开发者实现复杂的安全需求。通过具体的示例代码,可以清晰地了解 Spring Security 的配置方法和实践。
60 23
|
8天前
|
网络协议 Java Shell
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
40 7
|
27天前
|
Java 调度 开发者
Java线程池ExecutorService学习和使用
通过学习和使用Java中的 `ExecutorService`,可以显著提升并发编程的效率和代码的可维护性。合理配置线程池参数,结合实际应用场景,可以实现高效、可靠的并发处理。希望本文提供的示例和思路能够帮助开发者深入理解并应用 `ExecutorService`,实现更高效的并发程序。
34 10
|
30天前
|
Java 数据库连接 数据库
【潜意识Java】深度分析黑马项目《苍穹外卖》在Java学习中的重要性
《苍穹外卖》项目对Java学习至关重要。它涵盖了用户管理、商品查询、订单处理等模块,涉及Spring Boot、MyBatis、Redis等技术栈。
86 4
|
30天前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
30 4
|
30天前
|
存储 移动开发 算法
【潜意识Java】Java基础教程:从零开始的学习之旅
本文介绍了 Java 编程语言的基础知识,涵盖从简介、程序结构到面向对象编程的核心概念。首先,Java 是一种高级、跨平台的面向对象语言,支持“一次编写,到处运行”。接着,文章详细讲解了 Java 程序的基本结构,包括包声明、导入语句、类声明和 main 方法。随后,深入探讨了基础语法,如数据类型、变量、控制结构、方法和数组。此外,还介绍了面向对象编程的关键概念,例如类与对象、继承和多态。最后,针对常见的编程错误提供了调试技巧,并总结了学习 Java 的重要性和方法。适合初学者逐步掌握 Java 编程。
52 1
|
1月前
|
Kubernetes Java 持续交付
小团队 CI/CD 实践:无需运维,Java Web应用的自动化部署
本文介绍如何使用GitHub Actions和阿里云Kubernetes(ACK)实现Java Web应用的自动化部署。通过CI/CD流程,开发人员无需手动处理复杂的运维任务,从而提高效率并减少错误。文中详细讲解了Docker与Kubernetes的概念,并演示了从创建Kubernetes集群、配置容器镜像服务到设置GitHub仓库Secrets及编写GitHub Actions工作流的具体步骤。最终实现了代码提交后自动构建、推送镜像并部署到Kubernetes集群的功能。整个过程不仅简化了部署流程,还确保了应用在不同环境中的稳定运行。
75 9
|
2月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
103 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
3月前
|
SQL 安全 前端开发
Web学习_SQL注入_联合查询注入
联合查询注入是一种强大的SQL注入攻击方式,攻击者可以通过 `UNION`语句合并多个查询的结果,从而获取敏感信息。防御SQL注入需要多层次的措施,包括使用预处理语句和参数化查询、输入验证和过滤、最小权限原则、隐藏错误信息以及使用Web应用防火墙。通过这些措施,可以有效地提高Web应用程序的安全性,防止SQL注入攻击。
100 2

热门文章

最新文章

  • 1
    打造高效的Web Scraper:Python与Selenium的完美结合
    13
  • 2
    Burp Suite Professional 2025.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
    26
  • 3
    AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试
    20
  • 4
    【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
    54
  • 5
    部署使用 CHAT-NEXT-WEB 基于 Deepseek
    342
  • 6
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    26
  • 7
    java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
    40
  • 8
    零基础构建开源项目OpenIM桌面应用和pc web- Electron篇
    28
  • 9
    【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
    22
  • 10
    FastAPI与Selenium:打造高效的Web数据抓取服务 —— 采集Pixabay中的图片及相关信息
    55