AXIS2中对POJO类部署自动生成的WSDL文件中,方法返回值变量名默认“return”的处理(咋个办呢 zgbn)

在AXIS2中,针对POJO类部署生成的WSDL文件,方法返回值变量名默认为"return",这可能导致与其他框架冲突。通过深入研究AXIS2源码,找到了解决办法。关键在于修改特定类的特定方法。通过在POJO类的方法上添加注解来指定返回值变量名,重新部署服务后,WSDL文件将反映出自定义的变量名。
摘要由CSDN通过智能技术生成

AXIS2中对POJO类部署自动生成的WSDL文件中,方法返回值变量名默认“return”的处理

2011-07-19 16:48:00 发表于网易博客


近几天,遇到一个问题,就是使用axis2自动生成的pojo映射的WSDL文件,对每个方法描述中对方法返回值的变量名默认总是“return”字符串的问题。

对于return来说对其他调用此接口的框架来说数据关键字,所以需要修改,但是我总不能每个文件都要改一遍,然后再反编译成java类文件,在重新写业务逻辑吧。

所以我就想在axis2的源码上下功夫了。

<xs:element name="plusResponse">
	<xs:complexType>
		<xs:sequence>
			<xs:element minOccurs="0" name="TEST_CalculateService_plus" type="xs:float"/>
		</xs:sequence>
	</xs:complexType>
</xs:element>
... ...
<xs:element name="divideResponse">
	<xs:complexType>
		<xs:sequence>
			<xs:element minOccurs
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于 Apache Axis2,我们可以将上述方法对外提供为 web 服务,并生成 WSDL 文件,同时也可以利用 Axis2 客户端代码调用该服务。 首先,我们需要在项目引入 Axis2 的相关依赖包,并进行配置和部署。 1. 引入依赖包 首先,在项目的 pom.xml 文件添加相关依赖: ```xml <dependency> <groupId>org.apache.axis2</groupId> <artifactId>axis2</artifactId> <version>1.7.9</version> </dependency> ``` 2. 配置和部署 在项目的配置文件,我们需要配置 Axis2 的相关信息,如 web.xml 文件添加以下内容: ```xml <servlet> <servlet-name>AxisServlet</servlet-name> <display-name>Apache-Axis2</display-name> <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class> <init-param> <param-name>axis2.repository.path</param-name> <param-value>/WEB-INF/axis2.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> ``` 在项目的根目录下,创建文件夹 WEB-INF,再在 WEB-INF 目录下创建文件 axis2.xml,文件内容如下: ```xml <axisconfig name="AxisJava2.0"> <handler name="SimpleFileUploadHandler" class="org.apache.axis2.handlers.SimpleFileUploadHandler"/> <deployer extension=".aar" directory="axis2services"/> </axisconfig> ``` 然后,在项目新建一个来实现我们的 web 服务: ```java package com.example; public class ExampleService { public String sayHello(String name) { return "Hello, " + name + "!"; } } ``` 在该,我们提供了一个名为 sayHello 的方法,用于返回一个字符串。 接下来,我们可以使用 Axis2 的工具来生成 WSDL 文件,即我们的服务描述文件。 ```java package com.example; import org.apache.axis2.description.AxisService; import org.apache.axis2.description.Parameter; import org.apache.axis2.description.WSDL2Constants; import org.apache.axis2.engine.AxisConfiguration; import org.apache.axis2.transport.http.AxisServlet; import org.apache.axis2.wsdl.WSDLConstants; import org.apache.axis2.wsdl.WSDLUtil; import org.apache.axis2.wsdl.WSDLConstants.WSDL20_2004_Constants; import org.apache.woden.WSDLFactory; import org.apache.woden.WSDLWriter; import javax.servlet.ServletContext; import javax.wsdl.WSDLException; import javax.wsdl.xml.WSDLLocator; import javax.wsdl.xml.WSDLWriter; import java.io.OutputStream; import java.util.Iterator; public class WsdlGenerator { private AxisServlet axisServlet; public WsdlGenerator(AxisServlet axisServlet) { this.axisServlet = axisServlet; } public void generateWsdlFile(OutputStream outputStream, String serviceName) throws WSDLException { AxisConfiguration axisConfiguration = axisServlet.getConfigurationContext().getAxisConfiguration(); AxisService axisService = axisConfiguration.getService(serviceName); WSDLWriter wsdlWriter = WSDLFactory.newInstance().newWSDLWriter(); wsdlWriter.writeWSDL(new WSDL2Constants.WSDL(, new WSDLLocator() { @Override public String getBaseURI() { return null; } @Override public String getLatestImportURI() { return null; } @Override public java.io.Reader getBaseReader() { return null; } @Override public java.io.Reader getImportReader(String parentLocation, String importLocation) { return null; } @Override public javax.wsdl.xml.WSDLLocator getBaseLocator() { return null; } })); The generated WSDL file can then be returned to the caller by writing it to the OutputStream. 提供的参数 outputStream 是用于写入 WSDL 文件的输出流,serviceName 是指定的服务名称。 使用 Axis2 客户端调用我们的服务,可以使用以下代码: ```java package com.example.client; import org.apache.axis2.client.ServiceClient; import org.apache.axis2.transport.http.HTTPConstants; import org.apache.axis2.transport.http.HttpTransportProperties; public class ClientExample { public static void main(String[] args) throws Exception { ServiceClient serviceClient = new ServiceClient(); HttpTransportProperties.Authenticator auth = new HttpTransportProperties.Authenticator(); auth.setUsername("username"); auth.setPassword("password"); serviceClient.getOptions().setProperty(HTTPConstants.AUTHENTICATE, auth); serviceClient.getOptions().setTo(targetEPR); serviceClient.sendReceive(operation); } } ``` 在该代码,我们首先创建一个 ServiceClient 对象,然后设置用户名和密码,接着设置服务的目标地址,最后发送请求。 使用以上步骤,我们可以基于 Apache Axis2 将上述方法对外提供为 web 服务,生成 WSDL 文件,并可以使用 Axis2 客户端代码来调用该服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值