The wsgen
tool is used to parse an existing web service implementation class and generates required files (JAX-WS portable artifacts) for web service deployment. This wsgen
tool is available in $JDK/bin
folder.
Use cases
2 common use cases for wsgen tool :
- Generates JAX-WS portable artifacts (Java files) for web service deployment.
- Generates WSDL and xsd files, for testing or web service client development.
Let’s see a web service implementation class, quite simple, just a method to return a string.
File : ServerInfo.java
package com.mkyong.ws;
import javax.jws.WebMethod;
import javax.jws.WebService;
@WebService
public class ServerInfo{
@WebMethod
public String getIpAddress() {
return "10.10.10.10";
}
}
1. Generates JAX-WS portable artifacts (Java files)
To generate all the JAX-WS portable artifacts for above web service implementation class (ServerInfo.java
), use following command :
Command : wsgen usage
D:\>wsgen -verbose -keep -cp . com.mkyong.ws.ServerInfo Note: ap round: 1 [ProcessedMethods Class: com.mkyong.ws.ServerInfo] [should process method: getIpAddress hasWebMethods: true ] [endpointReferencesInterface: false] [declaring class has WebSevice: true] [returning: true] [WrapperGen - method: getIpAddress()] [method.getDeclaringType(): com.mkyong.ws.ServerInfo] [requestWrapper: com.mkyong.ws.jaxws.GetIpAddress] [ProcessedMethods Class: java.lang.Object] com\mkyong\ws\jaxws\GetIpAddress.java com\mkyong\ws\jaxws\GetIpAddressResponse.java Note: ap round: 2
In this case, it generated four files :
- com\mkyong\ws\jaxws\GetIpAddress.java
- com\mkyong\ws\jaxws\GetIpAddress.class
- com\mkyong\ws\jaxws\GetIpAddressResponse.java
- com\mkyong\ws\jaxws\GetIpAddressResponse.class
File : GetIpAddress.java
package com.mkyong.ws.jaxws;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlRootElement(name = "getIpAddress", namespace = "http://ws.mkyong.com/")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "getIpAddress", namespace = "http://ws.mkyong.com/")
public class GetIpAddress {
}
File : GetIpAddressResponse.java
package com.mkyong.ws.jaxws;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlRootElement(name = "getIpAddressResponse", namespace = "http://ws.mkyong.com/")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "getIpAddressResponse", namespace = "http://ws.mkyong.com/")
public class GetIpAddressResponse {
@XmlElement(name = "return", namespace = "")
private String _return;
/**
*
* @return
* returns String
*/
public String getReturn() {
return this._return;
}
/**
*
* @param _return
* the value for the _return property
*/
public void setReturn(String _return) {
this._return = _return;
}
}
2. Genarates WSDL and xsd
To generate WSDL and xsd files for above web service implementation class (ServerInfo.java
), add an extra -wsdl in the wsgen
command :
Command : wsgen usage
D:\>wsgen -verbose -keep -cp . com.mkyong.ws.ServerInfo -wsdl Note: ap round: 1 [ProcessedMethods Class: com.mkyong.ws.ServerInfo] [should process method: getIpAddress hasWebMethods: true ] [endpointReferencesInterface: false] [declaring class has WebSevice: true] [returning: true] [WrapperGen - method: getIpAddress()] [method.getDeclaringType(): com.mkyong.ws.ServerInfo] [requestWrapper: com.mkyong.ws.jaxws.GetIpAddress] [ProcessedMethods Class: java.lang.Object] com\mkyong\ws\jaxws\GetIpAddress.java com\mkyong\ws\jaxws\GetIpAddressResponse.java Note: ap round: 2
In this case, it generated six files :
- com\mkyong\ws\jaxws\GetIpAddress.java
- com\mkyong\ws\jaxws\GetIpAddress.class
- com\mkyong\ws\jaxws\GetIpAddressResponse.java
- com\mkyong\ws\jaxws\GetIpAddressResponse.class
- ServerInfoService_schema1.xsd
- ServerInfoService.wsdl
File : ServerInfoService_schema1.xsd
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <xs:schema version="1.0" targetNamespace="http://ws.mkyong.com/" xmlns:tns="http://ws.mkyong.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="getIpAddress" type="tns:getIpAddress"/> <xs:element name="getIpAddressResponse" type="tns:getIpAddressResponse"/> <xs:complexType name="getIpAddress"> <xs:sequence/> </xs:complexType> <xs:complexType name="getIpAddressResponse"> <xs:sequence> <xs:element name="return" type="xs:string" minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:schema>
File : ServerInfoService.wsdl
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <definitions targetNamespace="http://ws.mkyong.com/" name="ServerInfoService" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://ws.mkyong.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"> <types> <xsd:schema> <xsd:import namespace="http://ws.mkyong.com/" schemaLocation="ServerInfoService_schema1.xsd"/> </xsd:schema> </types> <message name="getIpAddress"> <part name="parameters" element="tns:getIpAddress"/> </message> <message name="getIpAddressResponse"> <part name="parameters" element="tns:getIpAddressResponse"/> </message> <portType name="ServerInfo"> <operation name="getIpAddress"> <input message="tns:getIpAddress"/> <output message="tns:getIpAddressResponse"/> </operation> </portType> <binding name="ServerInfoPortBinding" type="tns:ServerInfo"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/> <operation name="getIpAddress"> <soap:operation soapAction=""/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> </binding> <service name="ServerInfoService"> <port name="ServerInfoPort" binding="tns:ServerInfoPortBinding"> <soap:address location="REPLACE_WITH_ACTUAL_URL"/> </port> </service> </definitions>
Published It!
All files are ready, publish it via endpoint publisher.
package com.mkyong.endpoint;
import javax.xml.ws.Endpoint;
import com.mkyong.ws.ServerInfo;
//Endpoint publisher
public class WsPublisher{
public static void main(String[] args) {
Endpoint.publish("http://localhost:8888/ws/server", new ServerInfo());
System.out.println("Service is published!");
}
}
link: http://www.mkyong.com/webservices/jax-ws/jax-ws-wsgen-tool-example/
http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/2.0/tutorial/doc/index.html