`
futurep_p
  • 浏览: 66141 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

wsdl之自动生成java代码及可配置化

阅读更多

   当java需要调用.net的webservice服务时,我们希望通过显式的代码调用,而且也有相当好的maven插件可供使用,如axis的wsdl2code,下面就以此为例,对整个过程搞个step-by-step吧。

 1、配置pom.xml,引入axis2-wsdl2code-maven-plugin。还有就是axis的相关包依赖,下面是插件配置:

<build>
	......
	 <plugins>
		<plugin>
			<groupId>org.apache.axis2</groupId>
			<artifactId>axis2-wsdl2code-maven-plugin</artifactId>
			<version>1.4.1</version>
			<executions>
				<execution>
						<id>wsdl2code-client</id>
						<phase>process-resources</phase>
						<goals>
							<goal>wsdl2code</goal>
						</goals>
				</execution>
			</executions>
			<configuration>
				<packageName>com.***.***</packageName>
				<wsdlFile>http://127.0.0.1:port/?wsdl</wsdlFile>
				<databindingName>adb</databindingName>
				<generateServicesXml>false</generateServicesXml>
			</configuration> 
		</plugin>
	</plugins>
  </build>

 packageName:你要生成代码的包路径;
 wsdlFile:wsdl地址,就是你可以直接在浏览器里查看结果的那个地址。
 databindingName:数据绑定名称,这里用了是adb,还有其他什么xmlBean,jibx等等,切换不同的banding,生成的效果也不同。
下面以adb为例,我们执行install之后,会在插件目录下生成你前面设定的package路径的类存根文件。×××Stub和×××CallbackHandler两个文件。其实我们要用到的也就Stub类。

 

2、编写访问方法。stub下面有两个对象是需要特别关心的,一个×××Request(请求对象,请求参数在这里编写),一个是ResponseInfo(相应结果,返回结果在这里获取)。 如何实现一个调用呢,下面看看一个最简单的例子吧,假设有一个Person的服务:

// 1、组装参数
PersonRetRequest request = new PersonRetRequest();
request.setName("superMan");

// 2、给需要调用的方法设置参数
PersonStub.Apply action = new PersonStub.Apply();
action.setRequest(request);

// 3、目标请求
PersionStub stub = new PersionStub();
PersonStub.ApplyResponse response = stub.Apply(action);

// 4、获取执行结果
ResponseInfo responseInfo = response.getApplyResult();

 

 

3、也许有朋友已经注意到了,这里把targetEndPoint给丢了,用了存根的默认构造,那么目标地址也就代码里写死了,这样明显满足不了动态配置地址的需求。现在再去看看Stub的构造方法,发现它有多个构造方法,其中一个是根据目标地址构造的,也就是wsdl服务地址,这个对我们是相当有用的,因为切换地址是很平常的事情,我们也尽量的能做到可配置话。
 本人写了服务地址配置基类,需要进行外部访问的类可以继承此方法,让它具备参数注入的前提,那就是targetEndPoint,下面是源代码:

 

/**
 * <p>远程访问处理抽象类</p>
 * 完成对访问地址的封装
 */
public abstract class AbstractRemoteInvoke implements Constant {
    protected static final Logger logger = Logger.getLogger(AbstractRemoteInvoke.class);

    /** 访问地址信息 */
    private String                targetEndpoint;

    /**
     * 获取目标服务对象
     * 子类统一调用此方法获取目标服务对象
     * @param targetStubClass 目标服务对象class
     * @return
     */
    @SuppressWarnings("unchecked")
    protected Stub getTargetStub(Class targetStubClass) throws AxisFault {
        try {
            // 如果未设置地址,直接返回默认构造出的对象
            if (StringUtil.isBlank(targetEndpoint)
                || targetEndpoint.indexOf(PLACEHOLDER_PREFIX) == 0) {
                Constructor constructor = targetStubClass.getConstructor();

                return (Stub) constructor.newInstance();
            }

            Constructor constructor = targetStubClass.getConstructor(String.class);
            return (Stub) constructor.newInstance(targetEndpoint);
        } catch (Exception e) {
            logger.warn("反射构造远程服务对象失败", e);

            throw new AxisFault("远程服务不可用!");
        }
    }

    /**
     * 设置目标目标地址
     * @param targetEndpoint
     */
    public void setTargetEndpoint(String targetEndpoint) {
        this.targetEndpoint = targetEndpoint;
    }
}

 接下来要做的就是将 PersionStub stub = new PersionStub(); 替换为 PersionStub stub = (PersionStub)super.getTargetSub(PersionStub.class)。


并且在配置invoke bean的时候增加<property name="targetEndpoint" value="${person.remote.url}" />配置,当然这个地址你还可以通过pom.xml配置实现在编译期的生成。
如果你喜欢用PersionStub stub = new PersionStub(targetEndpoint)的形式来完成,同样没问题,呵呵。

分享到:
评论

相关推荐

    wsdl生成java代码工具

    本篇文章将详细探讨“wsdl生成java代码工具”的相关知识点,以及如何使用这个工具。 1. **WSDL简介**: WSDL文件描述了Web服务的接口,包括服务提供的操作、输入和输出消息的格式,以及服务的位置。它使得开发者...

    把wsdl文件或地址转化成java代码工具

    这样,开发者无需手动编写调用Web服务的Java代码,只需导入WSDL文件,MyEclipse就能自动生成相应的Java客户端 stub类,这些类提供了与Web服务交互的方法。 具体步骤如下: 1. 打开MyEclipse,创建一个新的Web项目...

    xfire根据WSDL生成客户端代码

    使用XFire根据WSDL生成客户端代码,可以大大简化开发过程,因为它自动生成了与服务接口对应的Java类和代理。以下是具体步骤: 1. **安装和配置XFire**:首先,确保已经下载并安装了XFire库。你可以通过Maven或...

    wsdl2java 生成wsdljava客户端所需要的包

    它是由Apache CXF项目提供的,能够从一个WSDL文件自动生成Java源代码,这些源代码包含了客户端调用Web服务所需的 stubs、proxies和数据绑定类。这极大地简化了开发者的工作,无需手动编写复杂的网络调用代码。 生成...

    根据wsdl生成webservice服务端(3种方式)

    `wsdl2java`是Apache CXF提供的一个工具,用于根据WSDL文件自动生成Java代码。以下是详细步骤: 1. **配置环境**:确保已安装JDK 1.6及以上版本,并设置好环境变量。还需要下载Apache CXF 2.2.8并解压,将解压后的`...

    WSDL2Java--根据wsdl生成Java客户端工具

    - **自动化**:自动从WSDL生成Java代码,减少了手动编写客户端代码的工作量。 - **可扩展性**:可以根据需要自定义生成的代码,适应不同的业务场景。 - **跨平台**:基于XML标准,可以在任何支持Java的平台上使用。 ...

    AXIS2 1.7.3 idea wsdl 代码生成插件

    3. **代码生成**:AXIS2的代码生成工具能够从WSDL文件自动生成服务端和客户端的Java代码。服务端代码包括服务接口、服务实现类、部署描述符等;客户端代码主要包括Stub类,用于调用远程服务。 4. **IDEA集成**:...

    wsdl2java生成工具

    WSDL2Java工具是Apache CXF框架的一部分,它允许开发者从一个WSDL文件自动生成Java客户端和服务端的源代码,极大地简化了Web服务的开发过程。 **一、WSDL2Java工具的作用** 1. **客户端代码生成**:当您有一个WSDL...

    关于wsdl生成java的方式

    综上所述,这个话题涵盖了Web服务开发中的一个重要环节,即如何通过WSDL文件自动生成Java代码,这对于理解和实现服务的客户端和服务端通信至关重要。通过选择合适的工具并正确使用,开发者可以高效地实现Web服务的...

    webservice接口的wsdl文件已经生成java代码.pdf

    在Java中,从WSDL文件生成Java代码是为了简化客户端调用Web服务的过程,通常生成的代码包括了stub类,这些类提供了直接调用Web服务的方法。 在描述的场景中,已有一个WSDL文件生成了Java代码,这意味着开发人员可以...

    wsdl2java 客户端的自动生成工具

    在Java WebService开发中,`Wsdl2Java`是一个非常实用的工具,主要用于根据WSDL(Web Services Description Language)文件自动生成对应的Java客户端代码。这极大地简化了开发过程,使得开发者可以快速地与远程服务...

    由wsdl快速生成客户端java代码 (eclipse3.x)

    - 确保你的WSDL文件有效且可达,否则生成Java代码时可能会失败。 - 生成的代码通常包含一些自动创建的包和类,根据实际需求进行调整。 - 如果服务使用了命名空间,确保在生成代码后正确处理命名空间相关的导入。 ...

    使MyEclipse调用Axis的wsdl2java 通过wsdl生成客户端

    MyEclipse会根据WSDL内容自动生成相应的Java客户端代码,包括服务代理类和服务接口。 5. 编译和运行客户端:生成的代码通常位于`src`目录下的一个新包内。现在可以编写客户端程序来调用Web服务。例如,你可以找到...

    WSDL使用axis2生成代码项目

    本项目“WSDL使用axis2生成代码”着重讲解如何利用Apache Axis2这个强大的Web服务框架,从WSDL文件自动生成Java代码,从而简化开发流程。Apache Axis2是一个成熟的SOAP(Simple Object Access Protocol)处理引擎,...

    Eclipse根据wsdl文件自动生成webservice client图解

    本文将详细讲解如何在Eclipse环境中,根据WSDL文件自动生成WebService客户端,并提供调用示例。 首先,我们需要理解WSDL文件的结构。WSDL文件包含了服务的端点(或地址)、操作(或服务方法)、输入和输出消息的...

    wsdl2java命令使用

    `wsdl2java`是Axis提供的命令行工具,它能够根据WSDL文件自动生成Java客户端和服务器端的代码。使用步骤如下: 1. **安装Apache Axis**:首先,你需要下载并安装Apache Axis,通常包括jar文件和相关脚本。 2. **...

    根据wsdl 用ant生成jar和客服端java代码

    3. **配置Ant构建文件**:在项目根目录下创建或修改build.xml文件,定义Ant任务来调用Axis的wsdl2java工具生成Java代码。以下是一个基本的示例: ```xml &lt;project name="wsdl-build" default="generate-client"&gt; ...

    onvif代码生成的所有wsdl文件及其自动生成代码脚本

    在本案例中,这个脚本可能是用来根据WSDL文件自动生成C或C++代码的工具。这样的工具会解析WSDL,生成相应的服务客户端或服务器端代理类,使得开发者无需手动编写复杂的SOAP消息处理代码。通常,这些脚本会调用像是`...

    使用CXF: Java 2 WSDL

    在本例中,我们关注的是反向过程,即从Java代码生成WSDL。 4. **配置CXF环境**:使用CXF的工具前,需要先将其添加到系统的类路径中,或者在IDE(如Eclipse、IntelliJ IDEA)中配置相应的插件。`cxf环境变量配置以及...

    Eclipse中用wsdl生成java客户端.pdf

    以下是使用Eclipse从WSDL生成Java客户端的详细步骤,以及相关知识点的解释: 1. **创建Java项目**: 首先,打开Eclipse,创建一个新的Java项目。在"File"菜单中选择"New" -&gt; "Java Project",输入项目名称,例如...

Global site tag (gtag.js) - Google Analytics