Ref:- http://www.mkyong.com/webservices/jax-ws/jax-ws-wsgen-tool-example/
http://www.mkyong.com/webservices/jax-ws/jax-ws-wsimport-tool-example/
JAX-WS : wsgen tool example
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!");
}
}
JAX-WS : wsimport tool example
The
wsimport
tool is used to parse an existing Web Services Description Language (WSDL) file and generate required files (JAX-WS portable artifacts) for web service client to access the published web services. This wsimport
tool is available in the $JDK/bin
folder.Use Case
An common use case of this
wsimport
tool.1. Server – Published web service – WSDL file.
The CompA has published a web service along with a WSDL file at URL : http://compA.com/ws/server?wsdl
For CompB, to develop a web service client to access the CompA published web service, they can use
wsimport
tool to parse CompA’s WSDL file and generate files (JAX-WS portable artifacts) to access CompA’s published service.
Command : wsimport command to parse CompA WSDL file
C:\>wsimport -keep -verbose http://compA.com/ws/server?wsdl
parsing WSDL...
generating code...
com\mkyong\ws\ServerInfo.java
com\mkyong\ws\ServerInfoImplService.java
No comments:
Post a Comment