cxf java to wsdl,WSDL to Java - Apache CXF Documentation - Apache Software Foundation

Synopsis

wsdl2java -fe * -db * -wv *

-p * -sn -b *

-catalog -d -compile

-classdir -impl -server -client -all

-autoNameResolution -defaultValues<=class name for DefaultValueProvider> -ant

-nexclude * -exsh

-dns -dex -validate -keep

-wsdlLocation -xjc -noAddressBinding -h

-v -verbose -quiet

Description

wsdl2java takes a WSDL document and generates fully annotated Java code from which to implement a service. The WSDL document must have a valid portType element, but it does not need to contain a binding element or a service element. Using the optional arguments you can customize the generated code. In addition, wsdl2java can generate an Ant based makefile to build your application.

Example

wsdl2java HelloWorld.wsdl

wsdl2java -p com.iona.greeting Greeting.wsdl

wsdl2java -client HelloWorld.wsdl

(See below for usage with Apache Ant and Maven.)

Arguments

The arguments used to manage the code generation process are reviewed in the following table.

Option

Interpretation

-?

Displays the online help for this utility.

-help

Displays the online help for this utility.

-h

Displays the online help for this utility.

-fe frontend-name

Specifies the frontend. Default is JAXWS. Currently supports only JAXWS frontend.

-db databinding-name

Specifies the databinding. Default is JAXB. Currently supports only JAXB databinding.

-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 zero, or more, JAXWS or JAXB binding files. Use spaces to separate 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 complile-class-dir

Specifies the directory into which the compiled class files are written.

-client

Generates starting point code for a client mainline.

-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

Generates the Ant build.xml file.

-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.) 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

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.

wsdlfile

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

You must specify the absolute or relative path to the WSDL document as the last argument.

Using wsdl2java with Ant

CXF (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 task, as follows:

The wsdl2java command can be wrapped inside an Ant target as shown below:

Make sure you set the "fork=true" attribute for the task as shown above. Also, remember to keep each word or flag within the command line options in its own element (e.g., do not use , but split them up into two elements as done here.)

JAXWS Customization

By 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

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">

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

If you are using the CXF Maven2 codegen-plugin, you should do this

org.apache.cxf

cxf-codegen-plugin

2.0.6

generate-sources

generate-sources

${basedir}/target/generated/src/main/java

${YOUR_WSDL_PATH}/myService.wsdl

-b

${YOUR_BINDING_FILE_PATH}/my_binding.xml

wsdl2java

Q: How to map xsd:dateTime to java.util.Date?

Well, people don't like the XMLGregorianCalendar which is the default mapping from the xsd:dateTime (xsd:time and xsd:date as well),

We can use the jaxws customization to change the default mapping, here are some sample binding files

If you have schema inside the wsdl, here is the binding file you can use:

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/">

parseMethod="org.apache.cxf.tools.common.DataTypeAdapter.parseDateTime"

printMethod="org.apache.cxf.tools.common.DataTypeAdapter.printDateTime"/>

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:

xmlns:jxb="http://java.sun.com/xml/ns/jaxb"

xmlns:xs="http://www.w3.org/2001/XMLSchema">

parseMethod="org.apache.cxf.tools.common.DataTypeAdapter.parseDateTime"

printMethod="org.apache.cxf.tools.common.DataTypeAdapter.printDateTime"/>

Q: How can I switch my generated web service method calls from wrapper style to non wrapper-style (or vice-versa)?

A: Create an external binding file and set the value of to true or false as desired:

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">

false

Alternatively you can embed this instruction within the WSDL file directly, as the immediate child of the wsdl:portType:

false

... other binding settings if needed ...

...

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.

Maven Plugins

In 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值