我正在尝试从多个WSDL文件生成Axis2(v1.6.1)Web服务客户端代码,这样我就可以在一个项目中拥有多个Web服务客户端。我使用Ant使用codegen任务生成源代码。
因此,我需要使用自定义命名空间来打包映射,以使每个Web服务客户端的代码与其他代码保持分离以避免冲突。
这里是一个示例WSDL文件的命名空间:
<wsdl:definitions targetNamespace="http://www.elster-eis.com/ImportExport"
xmlns:tns="http://www.elster-eis.com/ImportExport"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
我设法将生成的代码主体放入适当的包中。我已经设法在自定义包中生成soapenc命名空间。但是,我无法将org\w3\www\_2004\_06\xmlmime
中生成的代码放入我的自定义程序包的目录结构中。
这是我的Ant构建文件的相关部分:
<property name="srv.pkg" value="com.company.webservice.mas" />
<property name="srv.mappings" value="http://www.elster-eis.com/ImportExport=${srv.pkg},http://www.w3.org/2001/XMLSchema=${srv.pkg}.xsd,http://schemas.xmlsoap.org/wsdl/soap/=${srv.pkg}.soap,http://microsoft.com/wsdl/mime/textMatching/=${srv.pkg}.tm,http://schemas.xmlsoap.org/soap/encoding/=${srv.pkg}.soapenc,http://schemas.xmlsoap.org/wsdl/mime/=${srv.pkg}.mime,http://schemas.xmlsoap.org/wsdl/soap12/=${srv.pkg}.soap12,http://schemas.xmlsoap.org/wsdl/http/=${srv.pkg}.http,http://schemas.xmlsoap.org/wsdl/=${srv.pkg}.wsdl" />
<target name="build.source" depends="define.tasks">
<codegen
wsdlfilename="${srv.wsdl}"
packageName="${srv.pkg}"
databindingName="xmlbeans"
output="."
generateAllClasses="true"
serverside="true"
generateservicexml="true"
testcase="true"
namespaceToPackages="${srv.mappings}"
/>
</target>
这里是为了便于阅读而再次打包映射的命名空间(它们全部在一行上,用逗号分隔,没有空格,在Ant构建文件中):
http://www.elster-eis.com/ImportExport= $ {srv.pkg},
http://www.w3.org/2001/XMLSchema= $ {srv.pkg}的.xsd,
http://schemas.xmlsoap.org/wsdl/soap/= $ {srv.pkg} .soap扩展,
http://microsoft.com/wsdl/mime/textMatching/= $ {srv.pkg} .tm,
http://schemas.xmlsoap.org/soap/encoding/= $ {srv.pkg} .soapenc,
http://schemas.xmlsoap.org/wsdl/mime/= $ {srv.pkg} .mime,
http://schemas.xmlsoap.org/wsdl/soap12/= $ {srv.pkg} .soap12,
http://schemas.xmlsoap.org/wsdl/http/= $ {srv.pkg} .http,
http://schemas.xmlsoap.org/wsdl/= $ {srv.pkg}的.wsdl&#34;
我试图在$ {srv.pkg}结构下生成所有生成的代码,但是org.w3代码仍在其自己的目录结构下生成,我的名称空间映射被忽略。
我在哪里错了?
答案 0 :(得分:0)
我终于成功了。我查看了生成的源文件的内容,发现它描述了生成文件的实际命名空间。所以,我刚刚将THAT命名空间(http://www.w3.org/2004/06/xmlmime
)添加到我的映射中,现在它工作正常。
因此,最终的操作命名空间映射是:
<property name="srv.mappings" value="http://www.elster-eis.com/ImportExport=${srv.pkg},http://www.w3.org/2004/06/xmlmime=${srv.pkg}.xmlmime,http://schemas.xmlsoap.org/soap/encoding/=${srv.pkg}.soapenc" />
执行此操作后,生成的源现在会在其标题中显示:
/*
* An XML attribute type.
* Localname: contentType
* Namespace: http://www.w3.org/2004/06/xmlmime
* Java type: com.csa.webservice.mas.xmlmime.ContentTypeAttribute
*
* Automatically generated - do not modify.
*/
package com.csa.webservice.mas.xmlmime;