爱生活,爱分享


apache cxf框架wsdl2java命令与Springboot的整合使用

haiten 2019-11-26 1834浏览 0条评论
首页/正文
分享到: / / / /

一、下载地址

http://archive.apache.org/dist/cxf/

二、环境配置

1、配置环境变量

新建 CXF_HOME 设置为自己的软件目录,如:D:\DevTools\apache-cxf-3.3.4

在 CLASSPATH 最后添加: %CSF_HOME%\lib

在 PATH中 最后添加: %CSF_HOME%\bin

2、验证:

操作 win+R ---> cmd ---> 回车 ---》 wsdl2java -v

三、wsdl2java 的使用

wsdl2java -encoding utf-8 -d D:\SvnRepository\Project-Reward\project-reward\reward-server\frame-zone\src\main\java -p com.gmcc.frame.webservice.newOrgServiceOld -autoNameResolution https://zylz.zjportal.net/WS/NewOrgServiceOld.asmx?wsdl

-encoding 是指定编码类型;

-d 指定生成目录

-p 指定包名

-all 生成服务端和客户端代码

-client 生成客户端代码

-server 生成服务端代码

四、使用 Spingboot 构建相关的配置类及测试方法

引入依赖包:

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

编写配置类:

@Configuration
public class ServiceSoapConfig {

    @Bean
    public NewOrgServiceSoap newOrgServiceSoap(){
        return new NewOrgService().getNewOrgServiceSoap();
    }

}

编写测试方法:

@RestController
public class Test {

    @Autowired
    private IpAddressSearchWebServiceSoap soap;

    @GetMapping("/queryAllUserInfo")
    public Object queryAllUserInfo() {
        javax.xml.ws.Holder<CallResult> queryAllUserInfoResult = new Holder<>();
        javax.xml.ws.Holder<QueryAllUserInfoOut> outParam = new Holder<>();
        soap.queryAllUserInfo(
                "XXX",
                "XXX",
                "XXX",
                null,
                queryAllUserInfoResult,
                outParam
                );
        return outParam;
    }

}

五、进行接口测试

http://127.0.0.1:29090/test-frame/queryAllUserInfo

六、常见问题处理

(1)undefined simple or complex type 'soapenc:Array'

wsdl的出错部分:

<s:schema targetNamespace="http://tempuri.org/AbstractTypes">
    <s:import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
    <s:complexType name="StringArray">
        <s:complexContent mixed="false">
            <s:restriction base="soapenc:Array">
                <s:sequence>
                    <s:element minOccurs="0" maxOccurs="unbounded" name="String" type="s:string"/>
                </s:sequence>
            </s:restriction>
        </s:complexContent>
    </s:complexType>
</s:schema>

这个时候,将其另存为 xml 文件,修改该段,增加 schemaLocation,如:

<s:schema targetNamespace="http://tempuri.org/AbstractTypes">
    <s:import namespace="http://schemas.xmlsoap.org/soap/encoding/" schemaLocation="http://schemas.xmlsoap.org/soap/encoding/"/>
    <s:complexType name="StringArray">
        <s:complexContent mixed="false">
            <s:restriction base="soapenc:Array">
                <s:sequence>
                    <s:element minOccurs="0" maxOccurs="unbounded" name="String" type="s:string"/>
                </s:sequence>
            </s:restriction>
        </s:complexContent>
    </s:complexType>
</s:schema>

然后根据文件重新生成代码即可:

wsdl2java -encoding utf-8 -d D:\SvnRepository\Project-Swj\project-swj\gmcc-server\start-frame-single\src\main\java -p com.gmcc.frame.extra.zjportal.webservice.newSmsHelper -autoNameResolution E:\NewSmsHelper.xml
最后修改:2019-11-26 00:55:32 © 著作权归作者所有
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

上一篇

发表评论

说点什么吧~

评论列表

还没有人评论哦~赶快抢占沙发吧~