精华内容
下载资源
问答
  • IDEA中WebService生成Java代码并调用外部接口实现通过wsdl文件生成java代码调用外部接口 最近一个Spring项目中需要调用其他第三方系统的接口对接数据,对方只给了一个wsdl地址,我们需要根据给的wsdl地址,自己来...

    IDEA中WebService生成Java代码并调用外部接口实现


    最近一个Spring项目中需要调用其他第三方系统的接口对接数据,对方只给了一个wsdl地址,我们需要根据给的wsdl地址,自己来生成里边的接口等调用接口所需要的类,来调用接口实现数据获取,进行自己的业务处理。

    通过wsdl文件生成java代码

    我们根据wsdl地址生成所需接口的代码,方式很多。可以用jdk自带的wsimport,我是用的idea开发工具生成的。

    1. 根据对方提供的地址,在浏览器中输入能调用得到xml格式文件,证明对方服务开启并能访问,然后右键网页保存xml文件,修改后缀名为wsdl。
      在这里插入图片描述

    2. 将wsdl文件拷贝到项目中。idea生成的时候需要选择这个文件。在这里插入图片描述

    3. 首先你要确定你要确定将代码生成在哪里。如图我新建的一个项目,我打算在我新建的webservice文件夹里生成代码,点击file-new-module(idea版本好像老版本可以右键webservice文件夹来选择webservice client),如下:
      在这里插入图片描述

    4. 如果是第一次使用webservice Client来生成java代码,则需要安装插件,并重启浏览器,此时我已安装。在这里插入图片描述

    5. 安装好插件后,再次new modeuls,选择WebService Client,选择Axis方式来生成java代码,选择download来下载axis相关的jar包。在这里插入图片描述

    6. 点击next,配置代码生成的路径和模块名称,点击ok,点击finish,会下载相关jar包,下载成功后在这里插入图片描述

    7. 下载成功后,选择wsdl文件,生成java代码在这里插入图片描述

    8. 生成文件的目录,包括jar包和java代码和测试类在这里插入图片描述

    9. 生成的测试类如下:

    package example;
    
    public class HelloWorldClient {
        public static void main(String[] argv) {
            try {
                HelloWorldServiceLocator locator = new HelloWorldServiceLocator();
                Activator service = locator.get();
                // If authorization is required
                //((HelloWorldSoapBindingStub)service).setUsername("user3");
                //((HelloWorldSoapBindingStub)service).setPassword("pass3");
                // invoke business method
                service.businessMethod();
            } catch (javax.xml.rpc.ServiceException ex) {
                ex.printStackTrace();
            } catch (java.rmi.RemoteException ex) {
                ex.printStackTrace();
            }
        }
    }
    

    调用外部接口

    idea工具生成java代码后,还需要根据实际情况来调用接口

    1. 在测试类里面,可以测试调用外部接口在这里插入图片描述
    2. 这里我是新建了一个客户端类,来调用外部的接口方法在这里插入图片描述
    3. 调用成功返回数据在这里插入图片描述
    展开全文
  • 而如果对方系统是Webservice,则比较麻烦,本文主要讲解如何用对方的wsdl地址生成java客户端调用类并且动态配置访问地址并在java中使用1,首先我们先要获取对方的wsdl地址,例如http://xxxx/xxxx/xxxx.asmx?wsdl2, ....

    前言:

            有时,我们经常要和一些外部系统对接,如果是HTTP接口还好,直接用apache的HttpClient工具类调用即可。而如果对方系统是Webservice,则比较麻烦,本文主要讲解如何用对方的wsdl地址生成java客户端调用类并且动态配置访问地址并在java中使用

    1,首先我们先要获取对方的wsdl地址,例如

    http://xxxx/xxxx/xxxx.asmx?wsdl

    2,  接着,在cxf官网上下载apache-cxf-3.2.5。

            2.1,将apache-cxf-3.2.5解压缩后安装在D:\\apache-cxf-3.2.5中,设置CXF_HOME环境变量为D:\\ apache-cxf-3.2.5

    如下图所示:


        2.2,运行cmd,执行命令wsdl2java,等待大概1秒钟,出现USAGE证明设置成功


        2.3,用wsdl地址执行命令:其中-d代表输出路径,后面紧跟着路径,路径后面紧跟着地址,按回车键,生成成功!


    3,生成成功后,由于wsdl是写死在生成的java类的注解中的,有时我们会使用多套环境进行测试,验证,而sit和uat环境的wsdl地址是不尽相同的。此时,我们需要动态配置wsdl的地址和命名空间的地址

    @Component
    public class DebitPushClient implements InitializingBean {
    
        private static URL wsdlUrl;
    
        private static String debitWsdlUrl;
    
        private static String uri;
    
        private static QName SERVICE_NAME;
    
        public static HttpResult pushDebitData(String jsonData) {
            FinancialSharing ss = new FinancialSharing(wsdlUrl, SERVICE_NAME);
            return (HttpResult) WebServiceClientUtil.invokeWebServiceSoapAction(ss, new QName(uri, "FinancialSharingSoap12"), FinancialSharingSoap.class, "pushDebitData", jsonData);
        }
    
        /**
         *  初始化wsdl连接地址
         */
        private void initWsdlUrl() {
            URL url = null;
            try {
                wsdlUrl = new URL(debitWsdlUrl);
            } catch (MalformedURLException e) {
                java.util.logging.Logger.getLogger(FinancialSharing.class.getName())
                        .log(java.util.logging.Level.INFO,
                                "Can not initialize the default wsdl from {}",
                                debitWsdlUrl);
            }
        }
    
        /**
         * 从配置文件中读取wsdl地址
         * @param debitWsdlUrl 地址
         */
        @Value("${my.dfdk.wsdl.url:http://xxx.xxx.asmx?wsdl}")
        public void setDebitWsdlUrl(String debitWsdlUrl) {
            DebitPushClient.debitWsdlUrl = debitWsdlUrl;
        }
    
        /**
         * 从配置文件中读取命名空间地址
         * @param uri 命名空间地址
         */
        @Value("${my.dfdk.wsdl.namespace.uri:http://tempuri.org/}")
        public void setUri(String uri) {
            DebitPushClient.uri = uri;
        }
    
        /**
         * 初始化wsdl
         * @throws Exception
         */
        @Override
        public void afterPropertiesSet() throws Exception {
            initWsdlUrl();
            SERVICE_NAME = new QName(uri, "FinancialSharing");
        }
    }

    4,客户端调用,调用成功后,即可获取正确的响应结果,不需要再将xml转成java对象


    这篇文章,只是简单介绍了用wsdl地址生成java客户端调用代码的一种方法,除此之外,还可以用maven plugin

    cxf-codegen-plugin
    生成
    <build>
            <finalName>cxf-date</finalName>
    
            <plugins>
                <plugin>
                    <groupId>org.apache.cxf</groupId>
                    <artifactId>cxf-codegen-plugin</artifactId>
                    <version>${cxf.version}</version>
                    <executions>
                        <execution>
                            <id>generate-sources</id>
                            <phase>generate-sources</phase>
                            <configuration>
                                <sourceRoot>src/main/resources/cxf</sourceRoot>
                                <wsdlOptions>
                                    <wsdlOption>
                                        <wsdl>http://localhost:8080/cxf-date/services/BookService?wsdl</wsdl>
                                        <frontEnd>jaxws21</frontEnd>
                                        <faultSerialVersionUID>1</faultSerialVersionUID>
                                    </wsdlOption>
                                </wsdlOptions>
                            </configuration>
                            <goals>
                                <goal>wsdl2java</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>


    展开全文
  • Java与WCF交互(一):Java客户端调用WCF服务

    万次阅读 热门讨论 2010-08-24 15:03:00
    最近开始了解WCF。写了个最简单的Helloworld,想通过java客户端实现通信。没想到以我的基础,居然花了整整两天(当然是工作以外的时间,呵呵),整个过程大费周折,特写下此文,以供有需要的朋友参考:

     

    最近开始了解WCF。写了个最简单的Helloworld,想通过java客户端实现通信。没想到以我的基础,居然花了整整两天(当然是工作以外的时间,呵呵),整个过程大费周折,特写下此文,以供有需要的朋友参考:

    第一步:生成WCF服务

    新建WCF解决方案,分别添加三个项目,HelloTimeService(类库),HelloTimehost(控制台程序),HelloTimeClient(控制台程序),项目结构如图:
    邀月工作室
    各个项目的主要代码:
    service:
    邀月工作室

    Host:
    邀月工作室

    Client:
    邀月工作室

    编译通过后,测试Host和Client分别成功:
    邀月工作室

    邀月工作室

    保持Host程序打开,这样,WCF服务就一直可以被外部程序调用。当然也包括Java客户端。

    我们看看生成的WSDL

    邀月工作室

    邀月工作室

    第二步:调用WCF生成的WSDL生成java客户端。

    首先,请允许我介绍下axis2,它的官方地址:http://ws.apache.org/axis2/

    这是一个java平台的web service解决方案。我们最常用的是WSDL2Java和Java2WSDL两个功能。

    关于Web service的另一个解决方案是xFire,我没试过。

    关于命令行执行WSDL2Java,我也没有执行成功! 我这里介绍的是Code Generator Wizard - eclipse Plug-in,一个Eclipse的插件。而且是在参考了众多解决方案才配置成功!

    特别感谢yycxbjl 的这篇文章:http://www.cnblogs.com/yycxbjl/archive/2010/06/14/1758063.html

    我的Java整个配置环境:

    1.安装JDK并配置环境变量

      JAVA_HOME=D:/2000/Java/JDKUpdate(注意,不带版本号是为了以后升级时只复制文件,而不必修改环境变量。)
    path=%JAVA_HOME%/bin;
    classpath=.;%JAVA_HOME%/lib;%JAVA_HOME%/lib/tools.jar

     

    2.下载并安装Eclipse3.6 ,就是大家熟悉的太阳神Helios (解压即可)
      解压到:D:/2000/Java/Eclipse

     

    3.下载Tomcat6.0.29 (本文中使用的是绿色版,故解压即完成)
      解压到:D:/2000/Java/tomcat(注意,不带版本号是为了以后升级时只复制文件,而不必修改环境变量。)
      由于安装的是tomcat6.0不用配置tomcat的环境变量,至于以前的版本可以查资料。
      需要设置TOMCAT_HOME,CATAlINA等环境变量


    4.从    http://ws.apache.org/axis2/download/1_4_1/download.cgi 下载 axis2-1.4.1-bin.zip
    解压到:D:/2000/Java/Axis2,注意不要下载Axis2 1.5.1,原因 yycxbjl 说: “最新版的 1.5.0 与 1.5.1 中没有 backport-util-concurrent-3.1.jar, 无法解决:使用axis2-eclipse-codegen-wizard插件,从wsdl文件生成java文件时出错无法继续的问题,故不使用。)

     

    5.下载1.4.1版的 axis2-eclipse-codegen-wizard 与 axis2-eclipse-service-archiver-wizard

    http://ws.apache.org/axis2/tools/1_0/eclipse/wsdl2java-plugin.html#operation1

    (但解压后里面显示是1.3.0, 解压到:D:/2000/java/Eclipse/dropins  (连压缩包中的根目录一起解压出来)。也可以用传统的link方法部署。

    复制  D:/2000/Java/Axis2/lib/backport-util-concurrent-3.1.jar 与 geronimo-stax-api_1.0_spec-1.0.1.jar
    到:D:/2000/Java/Eclipse/dropins/Axis2_Codegen_Wizard_1.3.0/lib,  并编辑:D:/2000/Java/Eclipse/dropins/Axis2_Codegen_Wizard_1.3.0/plugin.xml
    在 runtime 下 添加
          <library name="lib/backport-util-concurrent-3.1.jar">
             <export name="*"/>
          </library>
          <library name="lib/geronimo-stax-api_1.0_spec-1.0.1">
             <export name="*"/>
          </library>

    将Axis2_Codegen_Wizard_1.3.0重命名为Axis2_Codegen_Wizard_1.4.1,(这是整个部署的关键!这里邀月折腾了整整一天!)


    新建一个Java projec t,命名为 GetWCFInfoByJavaClient,并在新项目中添加新向导,File-New

    此时,我们可以看到期待已久的wizard界面:
    邀月工作室

    邀月工作室

    邀月工作室

    邀月工作室

    邀月工作室

    邀月工作室

    此进,在新建的 GetWCFInfoByJavaClient 项目中建一个package,命名为org.tempuri,与前面自定义的命名空间一致。将生成的两个类文 件,ServiceCallbackHandler.java和ServiceStub.java文件添加进来,并在jreSE1.6库中添加 d:/2000/Java/Axis2/lib下所有jar文件的引用。

    注意此时有个特殊的文件,即Axis2_Codegen_Wizard_1.4.1/lib/axis2-1.4.1.jar,需要手动复制到d:/2000/java/axis2/lib下并添加到项目的jre库中,这是邀月第二个卡壳的地方,琢磨了好久,慎之慎之。

    项目的结构应该如下图:
    邀月工作室

    eclipse的命名空间提示就是比vs强啊!很喜欢Ctrl+1。呵呵。微软要是能做到这点,那该多好啊!

    要命的是,此时库都添加完成,检查代码也无误,居然编译错误,提示:

    Access restriction: The type AxisFault is not accessible due to restriction on required library D:/2000/Java/Axis2/lib/axis2-kernel-1.4.1.jar


    邀月工作室

    这下我傻眼了,于是赶紧google,这两天google.com老是无故罢工,真是祸不单行,终于找到一篇老外的文章,说是如下,即可解决:
        * Go to the Build Path settings in the project properties. Windows -> Preferences -> Java Compiler
        * Remove the JRE System Library
        * Add another JRE with a "perfect match"
        * clean and build your project again. It worked for me.

    试了下,我的默认jre环境果然是JDK5,于是换为jre system library

    邀月工作室


    邀月工作室

    邀月工作室

    终于编译成功!看到曙光了,

    邀月工作室

    此时,最后的工作就是在Main中调用stub得到我们想要的服务结果了,简单方法,将刚才生成的测试类的方法略作修改,即可运行。如下:
    邀月工作室

    这正是我们想要的结果。

     

    关于java与.net交互的其他文章,请参考:

    微软示例:

    Java/.NET Interoperability with the Microsoft.com Web Service
    http://msdn.microsoft.com/en-us/library/ms953968.aspx

    Interoperability Testing

    http://msdn.microsoft.com/en-us/library/aa480510.aspx

    IBM示例:使用 Eclipse 和 Java SE 6 创建独立 Web Services 应用程序,第 1 部分: Web Services 服务端应用程序(该链接需要先注册)

    https://www6.software.ibm.com/developerworks/cn/education/webservices/ws-eclipse-javase1/section2.html

     

     

    小结 : 这虽然只是一个简单的demo,但我问了许多人,并在论坛发问,可是由于使用环境的不同,最终没找到类似的环境,只好自己摸索实践,好在还有一点点 java基础,另外网上几个论坛像javaeye提供的答案过于陈旧,这正是java初学者苦恼之处,这点来看,微软的开发环境无论如何是值得称赞的,至少它不用跑到别的地盘去问答案。eclipse/tomcat/axis等代表的服务器和开发环境、插件配置非常的让初学者无奈!因为你不知道某个jar是 否与其他几千个jar很好的兼容。不知道java高手们是否指一条明道,非常感谢!并再次感谢yycxb

    下篇文章介绍WCF客户端如何调用java的web service,那要简单多了。敬请关注。

     


     附:WCF的配置文件:


    相关链接:

    邀月注:本文版权由邀月和CSDN共同所有,转载请注明出处。
    助人等于自助!   3w@live.cn
       

      

     

    展开全文
  • java进程要qi'd Runtime.getRuntime().exec(cmd) 的执行流程分析 继续上网查,大概意思是...肯定是Java调用外部程序的接口里处理比较特殊。嗯,刚好JDK也开源,看看源码去。 分析SUN JDK 1.5 SRC,找到Runti

    java进程调用一个外部程序,一般使用Runtime.getRuntime().exec(cmd)的方式启动。

    以下是Runtime.getRuntime().exec(cmd) 的执行流程分析

    分析SUN JDK 1.5 SRC,找到Runtime.getRuntime().exec(cmd)的执行流程:

    java.lang.Runtime.exec(cmd);

    --java.lang.ProcessBuilder.start();

    ----java.lang.ProcessImpl.start();

    ------Java_java_lang_UNIXProcess_forkAndExec() in j2se/src/solaris/native/java/lang/UNIXProcess_md.c

    --------1). fork(); 2). execvp();

    man fork知道,fork产生的子进程需要复制父进程在内存中的所有数据内容(代码段、数据段、堆栈段),由于全部复制开销较大,因此Linux已经采用copy-on-write机制,即只是复制页表,共享内容,在有改变的时候再去申请内存和复制数据。

    参考:

    http://my.oschina.net/jsan/blog/273672

    展开全文
  • 由于公司通过调用外部的wsdl文件来反编译成java类调用,搞了半天完美解决,在此记录一下,方便以后再使用到。 1,通过idea工具反编译wsdl接口 反编译后的java类 2,配置wsdl接口的配置类 访问的ip地址(不知道在...
  • 1、将外部系统提供的webservice地址通过cmd解析出java的webservice客户端文件(解析出之后会有一个interface接口); 2、配置cxf-client.xml文件( xmlns:xsi=...
  • Java Axis 直接调用webservice 接口工具类, 无需根据wsdl编译客户端,需要axis相关包,测试使用axis 1.4, 附demo引入axis包后直接可以测试;
  • 本地调用外部WebService接口 需要本人另外一个资源:WSDL2Java.zip(根据wsdl生成Java客户端
  • 最近在开发项目的过程中...Cookie和Session都为了用来保存状态信息,都是保存客户端状态的机制,它们都是为了解决HTTP无状态的问题而所做的努力。 Session可以用Cookie来实现,也可以用URL回写的机制来实现。 Cooki
  • CXF 服务调用java客户端代码

    千次阅读 2012-05-09 15:19:02
    package com.dawning.gridview.core.authmanagement.webapp.gvusermanagement.export.test; import java.util.List; //import javax.xml.bind.JAXBElement; import org.apache.cxf.endpoint.Client; import org.a
  • Java(JCo3)与SAP系统相互调用
  • 使用Java调用REST接口时设置超时时间

    万次阅读 2018-07-02 10:25:43
    关于在Java调用REST接口,首先来说一下JAX-RS。JAX-RS是JAVA EE6 引入的一个新技术。JAX-RS即Java API for RESTful Web Services,是一个Java 编程语言的应用程序接口,支持按照表述性状态转移(REST)架构风格...
  • 3. 客户端 调用接口 处理数据 3.1 调用 接口 3.1.1 实体类 3.1.2 controller 3.1.3service 3.1.3.1 接口 3.1.3.2 实现类 3.1.4 mapper 3.1.4.1 接口 ...
  • java调用天气接口实例

    千次阅读 2018-07-06 11:19:59
    利用 www.webxml.com.cn 提供的接口,返回的xml文件进行解析得到天气信息 package com.xx.demo; import java.io.InputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net....
  • Springboot整合CXF发布Web service和客户端调用(用户和密码验证)打开及用
  • Java调用webservice接口方法

    千次阅读 2015-12-23 16:41:16
    webservice的 发布一般都是使用WSDL(web service descriptive language)文件的样式来发布的,在WSDL文件里面,包含这个webservice暴露在外面可供使用的接口。 我们也可以在以下网站找到许多 webservice ...
  •  因为最近有个项目要调用webservice接口,之前接触的都是java开发服务端和客户端接口,开发前服务端一般会给个以http://xxx/services?wsdl地址的文件或者地址。这次对方给我个http://xxxx/service/getinfo.asmx ...
  • 本人第一次用idea学习Idea创建webservice服务和客户端调用以及如何部署: 首选是 创建webservice的方式和IDE中的部署发布测试: 1、AXIS,我是大致按照这个教程学习的:...
  • 它使用Web(HTTP)方式,接收和响应外部系统的某种请求,从而实现远程调用。 web service能解决: * 基于Web的服务:服务器端整出一些资源让客户端应用访问(获取数据) * 一个跨语言、跨平台的规范(抽象) * 多个...
  • 网上有很多关于java服务端和HTML客户端的...这是我写的java客户端,已经上线了,验证可用 1、pom文件配置jar包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId&g...
  • 目前在写一个webservice供外部进行调用,由于要进行身份的验证,所以我在webservice的服务端加如了拦截器(客户将自己的信息写在soapHead消息中),然后在拦截器中取出soapHead中的消息,进行数据库用户信息的验证,...
  • java如何写别接口给人调用(WebService)-XXOO

    万次阅读 热门讨论 2017-04-09 22:15:03
    计算机语言分类有很多,如C、C++、C#、Java、PHP、Python等等,她们有各自的特性及擅长的领域,但她们各自又不是全能的。...一般来说,方法层面的编程语言通信用的是网络接口形式,只暴露出形参和结果供别人调用
  • 1. Java调用webservice接口方法 webservice的 发布一般都是使用WSDL(web service descriptive language)文件的样式来发布的,在WSDL文件里面,包含这个webservice暴露在外面可供使用的接口。 我们也可以在...
  • java接口调用——webservice就是一个RPC而已 很多新手一听到接口就蒙逼,不知道接口是什么!其实接口就是RPC,通过远程访问别的程序提供的方法,然后获得该方法执行的接口,而不需要在本地执行该方法。就是本地...
  • JAVA使用JCO实现调用SAP接口方法

    万次阅读 2017-07-03 15:47:30
    一、配置连接(1)第一种连接配置1.根据操作系统将sapjco3.dll文件放入C:\Windows\...3.创建DisplaySalesActivity.java类,配置生成连接public class DisplaySalesActivity { static String DESTINATION_NAME1 = "AB
  • java使用代理调用外网接口

    千次阅读 2020-02-21 15:22:16
    背景 在调试本地程序的时候,如果需要访问Google,youtube,aptoide等网站的时候,是需要访问外网的。...项目中要用到google地图接口,这个接口要FQ才能访问到,下面是代码示例: 实际应用 package com.jeecg....
  • 提示!本文是我翻译自Elastic...Java REST客户端有两种风格: Java Low Level REST Client:官方提供的低级客户端。该客户端通过http来连接Elasticsearch集群。用户在使用该客户端时需要将请求数据手动拼接成Elast...
  • 20180811写在前面的话 有很多人遇到问题之后问我,结果大多数是因为配置问题,所以请详细阅读前面的配置步骤。 20181016注意事项 ...id=mp1421141115中的分享接口,需要修改接口名称和参数列表...
  • 客户端调用服务端提供的WebService接口方法):  使用工具:eclipse  需要引入如下包:下载链接: http://download.csdn.net/detail/taking_wang/4466806 。  开发步骤:1.创建工程  File->New->...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 88,787
精华内容 35,514
关键字:

java客户端调用外部接口

java 订阅