cxf反向根据.net wsdl内容生成服务器端代码

   历史遗留项目,采用c#开发,原有的web service是.net的,现在想换成java版本的服务端,但是客户端还是旧的.net客户端,这就需要根据wsdl内容反向编写java的web service端代码,下面是这几天折腾的结果。

    java端的web service想基于cxf开发,使用cxf springboot start,创建项目过程比较简单,关键点有maven的pom.xml文件中引用

 

        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
            <version>3.5.3</version>
        </dependency>

  再编写一个cxf的自动配置类

package com.xxx.webservicedemo.config;

import com.xxx.webservicedemo.service.OrderWebService;
import org.apache.cxf.Bus;

import org.apache.cxf.jaxws.EndpointImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.xml.ws.Endpoint;

@Configuration
@EnableAutoConfiguration
public class CxfConfig {

    @Autowired
    private Bus bus;

    @Autowired
    OrderWebService orderWebService;

    /** JAX-WS
     * 站点服务
     * **/
    @Bean
    public Endpoint endpoint() {
        EndpointImpl endpoint = new EndpointImpl(bus, orderWebService);
        endpoint.publish("/orderService");
        return endpoint;
    }
}

  这就行了,剩下的就是编写OrderWebService接口和实现类的事情了,这两个用cxf去基于wsdl描述反向生成服务器端代码实现。

  下载完整的apache cxf压缩包,配置CXF_HOME和path环境变量。

   把.net开发的web service的WSDL描述xml文件存到客户端本地,因为需要修改里面的内容,不修改的话会报错:

  

WSDLToJava Error: file:/xxx.xml: undefined simple or complex type 'soapenc:Array'

  这个undefined simple or complex type 'soapenc:Array' 报错是因为.net的web service协议版本太旧且不标准造成的,解决办法是下载一个 https://schemasxmlsoap.azurewebsites.net/soap/encoding/

 文件,保存到客户端本地和.net的web service描述xml文件放在同一个目录,如取名为encoding.xsd,然后去修改web service接口描述xml文档内容,找到

    <s:schema targetNamespace="http://www.tsxd.com.cn/AbstractTypes">
      <s:import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
      <s:complexType name="StringArray">
        <s:complexContent mixed="false">
          <s:restriction base="soapenc:Array">

改成

    <s:schema targetNamespace="http://www.tsxd.com.cn/AbstractTypes">
      <s:import namespace="http://schemas.xmlsoap.org/soap/encoding/" schemaLocation="encoding.xsd"/>
      <s:complexType name="StringArray">
        <s:complexContent mixed="false">
          <s:restriction base="soapenc:Array">

   然后执行wsdl2java.bat -p com.xxx.webservice -d d:\temp\ -server -impl -autoNameResolution  service1.xml

   然后还会报几个冲突错误,出现这种情况时打开encoding.xsd文件,根据提示修改对应的行,一般都是什么int,string,bool之类的类型定义冲突了,注释掉就可以了,例如:

  <!-- <xs:element name="string" type="tns:string" /> -->
  <xs:complexType name="string" >

  这样就可以生成成功了。

  

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

peihexian

你的鼓励是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值