|
Page Edited :
CXF20DOC :
WSDL to Java
WSDL to Java has been edited by Glen Mazza (Aug 25, 2007). Change summary: Added command-line version of Ant task to documentation. Synopsiswsdl2java [[-?]|[-help]|[-h]] [-fe <frontend name>] [-db <data binding name>] [-wv <wsdl version>]
[-p [[wsdl-namespace=] PackageName ] ...]
[-b <binding-name>] [-catalog <catalog-file-name>] [-d <output-directory>] [-compile]
[-classdir <compile-class-dir>] [-client] [-server] [-impl] [-all] [-ant] [-nexclude [schema-namespace[=java-packagename]] ...]
[-exsh (true/false)] [-dns(true/false)] [-dex (true/false)] [-validate] [-v] [[-verbose]|[-quiet]] {wsdlfile}
You must specify the absolute or relative path to the WSDL document as the last argument. Using wsdl2java with AntThe wsdl2java command can be wrapped inside an Ant target, as shown below: <?xml version="1.0"?> <project name="cxf wsdl2java" basedir="."> <property name="cxf.home" location ="/usr/myapps/cxf-2.0.1"/> <path id="cxf.classpath"> <fileset dir="${cxf.home}/lib"> <include name="*.jar"/> </fileset> </path> <target name="cxfWSDLToJava"> <java classname="org.apache.cxf.tools.wsdlto.WSDLToJava" fork="true"> <arg value="-client"/> <arg value="-d"/> <arg value="src"/> <arg value="MyWSDL.wsdl"/> <classpath> <path refid="cxf.classpath"/> </classpath> </java> </target> </project> Make sure you set the "fork=true" attribute for the <java/> task as shown above. Also, remember to keep each word or flag within the command line options in its own <arg/> element (e.g., do not use <arg value="-d src"/>, but split them up into two <arg/> elements as done here.) JAXWS CustomizationBy default, the frontend we used in CXF wsdl2java tool is JAXWS frontend, in JAXWS case, it allow us to customize the WSDL to Java mapping through the customization binding file, in samples/hello_world_async, you can see there is a wsdl/async_binding.xml binding file , which will be loaded by the tool and generate the extra async methods in the SEI. Q: What if I want to change the generated SEI name? A: We don't have an option to do this, but you can have a binding file like the following snippet to achieve this goal <bindings
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
wsdlLocation="hello_world.wsdl"
xmlns="http://java.sun.com/xml/ns/jaxws">
<bindings node="wsdl:definitions/wsdl:portType">
<class name="GreeterSEI"/>
</bindings>
</bindings>
Q: I had the binding file, how to pass this file to the wsdl2java A: If you are using the command line tool, you can do this wsdl2java HelloWorld.wsdl -b my_binding.xml If you are using the CXF ant wsdl2java macro, you can do this <wsdl2java file="hello_world.wsdl" bindingfile="${basedir}/wsdl/my_binding.xml"/>
If you are using the CXF Maven2 codegen-plugin, you should do this <plugin> <groupId>org.apache.cxf</groupId> <artifactId>cxf-codegen-plugin</artifactId> <version>2.0-incubator-RC-SNAPSHOT</version> <executions> <execution> <id>generate-sources</id> <phase>generate-sources</phase> <configuration> <sourceRoot>${basedir}/target/generated/src/main/java</sourceRoot> <wsdlOptions> <wsdlOption> <wsdl>${YOUR_WSDL_PATH}/myService.wsdl</wsdl> <extraargs> <extraarg>-b</extraarg> <extraarg>${YOUR_BINDING_FILE_PATH}/my_binding.xml</extraarg> </extraargs> </wsdlOption> </wsdlOptions> </configuration> <goals> <goal>wsdl2java</goal> </goals> </execution> </executions> </plugin> Q: How to map xsd:dateTime to java.util.Date? <jaxws:bindings wsdlLocation="YOUR_WSDL_LOCATION" 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:[EMAIL PROTECTED]'THE_NAMESPACE_OF_YOUR_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> </jaxws:bindings> </jaxws:bindings> If you want to use java.util.Calendar, just change the org.apache.cxf.tools.common.DataTypeAdapter to javax.xml.bind.DatatypeConverter, and change the name value to "java.util.Calendar" If your schema is out of wsdl, here is an example you can try: <jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <jxb:bindings schemaLocation="YOUR_SCHEMA_LOCATION" 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> Q: My WSDL is in wrapped style, but how can I generate the bare style code? A: You can customize the WSDL with the following binding file: <jaxws:bindings
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
wsdlLocation="your.wsdl"
xmlns="http://java.sun.com/xml/ns/jaxws"
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">
<enableWrapperStyle>false</enableWrapperStyle>
</jaxws:bindings>
Q: What else can I change with the JAXWS customization binding file? A: You can find the full list of customization items in Chapter 8 of the JAX-WS Specification. Maven PluginsIn CXF we have a mavens plugin, called "cxf-codegen-plugin", which includes the goal "wsdl2java", you can find more information in Maven Integration and Plugin |
Unsubscribe or edit your notifications preferences
