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


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

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

     

    1. <dependency>
    2. <groupId>org.apache.cxfgroupId>
    3. <artifactId>cxf-spring-boot-starter-jaxwsartifactId>
    4. <version>3.5.3version>
    5. dependency>

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

    1. package com.xxx.webservicedemo.config;
    2. import com.xxx.webservicedemo.service.OrderWebService;
    3. import org.apache.cxf.Bus;
    4. import org.apache.cxf.jaxws.EndpointImpl;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    7. import org.springframework.context.annotation.Bean;
    8. import org.springframework.context.annotation.Configuration;
    9. import javax.xml.ws.Endpoint;
    10. @Configuration
    11. @EnableAutoConfiguration
    12. public class CxfConfig {
    13. @Autowired
    14. private Bus bus;
    15. @Autowired
    16. OrderWebService orderWebService;
    17. /** JAX-WS
    18. * 站点服务
    19. * **/
    20. @Bean
    21. public Endpoint endpoint() {
    22. EndpointImpl endpoint = new EndpointImpl(bus, orderWebService);
    23. endpoint.publish("/orderService");
    24. return endpoint;
    25. }
    26. }

      这就行了,剩下的就是编写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文档内容,找到

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

    改成

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

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

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

    1. <xs:complexType name="string" >

      这样就可以生成成功了。

      

     

  • 相关阅读:
    【Python人工智能】Python全栈体系(二十二)
    C++ 核心编程(2)
    Java Web入门之JSP的基本语法解析及实战(超详细 附源码)
    2022.11.16 英语背诵
    c++11知识:auto类型推导
    Java基于B/S架构,包括PC后台管理端、APP移动端、可视化数据大屏的智慧工地源码
    阿里云服务器ECS经济型e实例租用价格表
    Servlet
    ArcGIS Pro怎么进行挖填方计算
    ZYNQ_project:key_led
  • 原文地址:https://blog.csdn.net/peihexian/article/details/126174185