WSDL to JavaPage edited by Christian Schneiderremove duplicate descriptions and set correct link to codegenSynopsiswsdl2java -fe <frontend name>* -db <data binding name>* -wv <[wsdl version]>* -p <[wsdl namespace =]Package Name>* -sn <service-name> -b <binding-name>* -catalog <catalog-file-name> -d <output-directory> -compile -classdir <compile-classes-directory> -impl -server -client -all -autoNameResolution -defaultValues<=class name for DefaultValueProvider> -ant -nexclude <schema namespace [= java packagename]>* -exsh <(true, false)> -dns <(true, false)> -dex <(true, false)> -validate -keep -wsdlLocation <wsdlLocation attribute> -xjc<xjc arguments> -noAddressBinding -h -v -verbose -quiet <wsdlurl>
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 (2.0.x and 2.1.x). 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 CustomizationThe default JAX-WS frontend created by wsdl2java can be customized by using a customization binding file. For an example, see the async_binding.xml file in samples/jaxws_async – if specified when running wsdl2java, it will generate asynchronous methods in the SEI. Q: What if I want to change the generated SEI name? A: We don't have a command-line 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: How do I pass the binding file to wsdl2java? A: If you are using wsdl2java via command line tool: wsdl2java HelloWorld.wsdl -b my_binding.xml For Ant, follow the example above on how to add "-b" and "my_binding.xml" as arg elements. For Maven see cxf-codegen-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:sche...@targetnamespace='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="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>
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"> <jaxws:enableWrapperStyle>false</jaxws: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 can be counterintuitive. Wrapper-style indicates that each data element within the request message gets its own Java parameter, while non-wrapper style means that a single Java object containing all the data elements serves as the lone parameter to the web service method call. (See Figure 2.2 of the specification for an example.) Also, note the wrapper style is not always available, the WSDL criteria specified in Section 2.3.1.2 ("Wrapper Style") of the specification must be met or only non-wrapper style will be generated. 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. Using maven to generate java code from WSDL
Change Notification Preferences
View Online
|
View Change
|
Add Comment
|
- [CONF] Apache CXF Documentation > WSDL to Java confluence
