|
Page Edited :
CXF20DOC :
WSDL to Java
WSDL to Java has been edited by Benson Margulies (Apr 07, 2008). Content: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 AntCXF (as of 2.1) includes ant tasks. See Ant Tasks. It is also possible to invoke the tools using an ordinary ant <java> task, as follows: The 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>
A: Create an external binding file and set the value of <enableWrapperStyle/> to true or false as desired: <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>
Alternatively you can embed this instruction within the WSDL file directly, as the immediate child of the wsdl:portType: <wsdl:portType name="MyWebServicePortType"> <jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"> <enableWrapperStyle>false</enableWrapperStyle> ... other binding settings if needed ... </jaxws:bindings> <wsdl:operation name="sayHello"> ... </wsdl:portType> Note: The meaning of "wrapper-style" and "non-wrapper style" as defined in the JAX-WS 2.1 specification 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 Maven 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
