CXF wsdl2java 详解及常见问题

  • Post author:
  • Post category:java


CXF提供从wsdl文件生成java代码的工具脚本:%CXF_HOME%\bin\wsdl2java.bat


脚本参数详解:

Option Interpretation

-?

,

-h

,

-help
Displays the online help for this utility and exits.

-fe frontend-name
Specifies the frontend. Default is JAXWS. Currently supports only JAXWS frontend and a “jaxws21” frontend to generate JAX-WS 2.1 compliant code.

-db databinding-name
Specifies the databinding. Default is jaxb. Currently supports jaxb, xmlbeans, sdo (sdo-static and sdo-dynamic), and jibx.

-wv wsdl-version
Specifies the wsdl version .Default is WSDL1.1. Currently suppports only WSDL1.1 version.

-p [ wsdl-namespace= ] PackageName
Specifies zero, or more, package names to use for the generated code. Optionally specifies the WSDL namespace to package name mapping.

-sn service-name
The WSDL service name to use for the generated code.

-b binding-name
Specifies JAXWS or JAXB binding files or XMLBeans context files. Use multiple -b flags to specify multiple entries.

-catalog catalog-file-name
Specify catalog file to map the imported wsdl/schema

-d output-directory
Specifies the directory into which the generated code files are written.

-compile
Compiles generated Java files.

-classdir compile-class-dir
Specifies the directory into which the compiled class files are written.

-client
Generates starting point code for a client mainline.

-clientjar jar-file-name
Generates the jar file which contains all the client classes and wsdl;the specified wsdlLocation won’t work when the -clientJar is defined.

-server
Generates starting point code for a server mainline.

-impl
Generates starting point code for an implementation object.

-all
Generates all starting point code: types, service proxy, service interface, server mainline, client mainline, implementation object, and an Ant

build.xml

file.

-ant
Specify to generate an Ant

build.xml

script.

-autoNameResolution
Automatically resolve naming conflicts without requiring the use of binding customizations.

-defaultValues=[DefaultValueProvider impl]
Specifies that default values are generated for the impl and client. You can also provide a custom default value provider. The default provider is

RandomValueProvider

-nexclude schema-namespace [=java-packagename]
Ignore the specified WSDL schema namespace when generating code. This option may be specified multiple times. Also, optionally specifies the Java package name used by types described in the excluded namespace(s).

-exsh (true/false)
Enables or disables processing of implicit SOAP headers (i.e. SOAP headers defined in the wsdl:binding but not wsdl:portType section.) Processing the SOAP headers requires the SOAP binding jars available on the classpath which was not the default in CXF 2.4.x and older. You may need to add a dependency to cxf-rt-binding-soap for this flag to work. Default is false.

-dns (true/false)
Enables or disables the loading of the default namespace package name mapping. Default is true and

http://www.w3.org/2005/08/addressing=org.apache.cxf.ws.addressing

namespace package mapping will be enabled.

-dex (true/false)
Enables or disables the loading of the default excludes namespace mapping. Default is true.

-validate
Enables validating the WSDL before generating the code.

-keep
Specifies that the code generator will not overwrite any preexisting files. You will be responsible for resolving any resulting compilation issues.

-wsdlLocation wsdlLocation
Specifies the value of the @WebServiceClient annotation’s wsdlLocation property.

-xjc<xjc args>
Specifies a comma separated list of

arguments

that are passed directly to the XJC processor when using the JAXB databinding. A list of available XJC plugins can be obtained using

-xjc-X

.

-noAddressBinding
For compatibility with CXF 2.0, this flag directs the code generator to generate the older CXF proprietary WS-Addressing types instead of the JAX-WS 2.1 compliant WS-Addressing types.

-v
Displays the version number for the tool.

-verbose
Displays comments during the code generation process.

-quiet
Suppresses comments during the code generation process.

-exceptionSuper
superclass for fault beans generated from wsdl:fault elements (defaults to java.lang.Exception)

-reserveClass classname
Used with -autoNameResolution, defines a class names for wsdl-to-java

not

to use when generating classes. Use this option multiple times for multiple classes.

-allowElementReferences<=true>
(or -aer) If true, disregards the rule given in section 2.3.1.2(v) of the JAX-WS 2.2 specification disallowing element references when using wrapper-style mapping.

-asyncMethods=foo,bar,...
List of subsequently generated Java class methods to allow for client-side asynchronous calls, similar to enableAsyncMapping in a JAX-WS binding file.

-bareMethods=foo,bar,...
List of subsequently generated Java class methods to have wrapper style (see below), similar to enableWrapperStyle in JAX-WS binding file.

-mimeMethods=foo,bar,...
List of subsequently generated Java class methods to enable mime:content mapping, similar to enableMIMEContent in JAX-WS binding file.

-faultSerialVersionUID <fault-serialVersionUID>
How to generate suid of fault exceptions. Use NONE, TIMESTAMP, FQCN, or a specific number. Default is NONE.

-mark-generated
Adds the

@Generated

annotation to classes generated.

wsdlurl
The path and name of the WSDL file to use in generating the code.

参考地址:

http://cxf.apache.org/docs/wsdl-to-java.html

【举例】


wsdl2java HelloWorld.wsdl


wsdl2java -p com.mycompany.greeting Greeting.wsdl


wsdl2java -client HelloWorld.wsdl


wsdl2java -server -b “binding.xml” -d d:\cxf sample.wsdl


SERVER端:



wsdl2java -b cxf_binding.xml -catalog cxf_catalog.xml -d server\src -server -impl -all -frontend jaxws21 -encoding utf-8 -autoNameResolution -keep example.wsdl



CLIENT端:




wsdl2java -b cxf_binding.xml -catalog cxf_catalog.xml -d client\src -client -impl -all -frontend jaxws21 -encoding utf-8 -autoNameResolution -keep example.wsdl






-impl:生成WS发布接口的实现类





-frontend jaxws21:使用JAX-WS 2.1





-encodng:生成文件的编码格式






常见问题:

1.

如何映射xsd:dateTime 到 java.util.Date 而不是 XMLGregorianCalendar

<jxb:bindings version="2.0"
              xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
              xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <jxb:bindings schemaLocation="file:<path><name>.xsd" node="/xs:schema">
    <jxb:globalBindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <jxb:javaType name="java.util.Date" xmlType="xs:dateTime" 
                    parseMethod="org.apache.cxf.tools.common.DataTypeAdapter.parseDateTime" 
                    printMethod="org.apache.cxf.tools.common.DataTypeAdapter.printDateTime"/>
    </jxb:globalBindings>
  </jxb:bindings>
</jxb:bindings>

2.

如何将属性的类型直接映射为JAVA类型而不是JAXBElement?

<jaxws:bindings wsdlLocation="JVTTroubleTicketSession.wsdl"
          xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
          xmlns:xs="http://www.w3.org/2001/XMLSchema"
          xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
          xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
	<jaxws:bindings  node="wsdl:definitions/wsdl:types/xs:schema" >
            <jxb:globalBindings generateElementProperty="false" >
            </jxb:globalBindings> 
	</jaxws:bindings>
</jaxws:bindings>


3.常见绑定文件及参数解释。

<?xml version="1.0" encoding="UTF-8"?>

<jxb:bindings xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb" version="2.1">


<jxb:globalBindings
fixedAttributeAsConstantProperty="true" typesafeEnumMaxMembers="300"
typesafeEnumMemberName="generateName" enableFailFastCheck="false"
generateIsSetMethod="false" underscoreBinding="asCharInWord"
choiceContentProperty="false" generateElementProperty="false">
<jxb:javaType name="java.util.Calendar" xmlType="xs:dateTime"
parseMethod="javax.xml.bind.DatatypeConverter.parseDate" printMethod="javax.xml.bind.DatatypeConverter.printDate" />
</jxb:globalBindings>


</jxb:bindings>



版权声明:本文为iteye_21082原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。