Posts Tagged ‘axis’
AXIS2 + JIBX web service client step by step
Below a low level tutorial on generating web services clients based on AXIS2 and JIBX marshalling. In real world, many of this tasks can be automatized using some tool like ANT or MAVEN.
0. Required tools
1. Initial resources
- XSD file for JIBX
- WSDL file for AXIS2
service.xsd
< ?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:ts="http://foo.bar.com"
targetNamespace="http://foo.bar.com"
elementFormDefault="qualified" attributeFormDefault="qualified">
<element name="fooRequest">
<complextype>
<sequence>
<element name="requestHeader">
<complextype>
<sequence>
<element name="type" type="string"/>
<element name="version" type="string"/>
</sequence>
</complextype>
</element>
<element name="requestData">
<complextype>
<sequence>
<element name="idObject" type="int"/>
</sequence>
</complextype>
</element>
</sequence>
</complextype>
</element>
<element name="fooResponse">
<complextype>
<sequence>
<element name="responseHeader">
<complextype>
<sequence>
<element name="type" type="string"/>
<element name="version" type="string"/>
<element name="responseCode" type="string"/>
<element name="responseDesc" type="string"/>
</sequence>
</complextype>
</element>
<element name="responseData" minOccurs="0">
<complextype>
<sequence>
<element name="name" type="string"/>
<element name="attributes" type="string"/>
</sequence>
</complextype>
</element>
</sequence>
</complextype>
</element>
</schema>
service.wsdl
< ?xml version="1.0" encoding="UTF-8"?>
<wsdl_definitions xmlns_wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns_schema="http://foo.bar.com"
xmlns_soap="http://schemas.xmlsoap.org/wsdl/soap/"
targetNamespace="http://foo.bar.com">
<wsdl_types>
<schema xmlns="http_//www.w3.org/2001/XMLSchema"
xmlns_ts="http://foo.bar.com"
targetNamespace="http://foo.bar.com"
elementFormDefault="qualified" attributeFormDefault="qualified">
<element name="fooRequest">
<complextype>
<sequence>
<element name="requestHeader">
<complextype>
<sequence>
<element name="type" type="string"/>
<element name="version" type="string"/>
</sequence>
</complextype>
</element>
<element name="requestData">
<complextype>
<sequence>
<element name="idObject" type="int"/>
</sequence>
</complextype>
</element>
</sequence>
</complextype>
</element>
<element name="fooResponse">
<complextype>
<sequence>
<element name="responseHeader">
<complextype>
<sequence>
<element name="type" type="string"/>
<element name="version" type="string"/>
<element name="responseCode" type="string"/>
<element name="responseDesc" type="string"/>
</sequence>
</complextype>
</element>
<element name="responseData" minOccurs="0">
<complextype>
<sequence>
<element name="name" type="string"/>
<element name="attributes" type="string"/>
</sequence>
</complextype>
</element>
</sequence>
</complextype>
</element>
</schema>
</wsdl_types>
<wsdl_message name="fooRequest">
<wsdl_part element="schema_fooRequest" name="fooRequest"/>
</wsdl_message>
<wsdl_message name="fooResponse">
<wsdl_part element="schema_fooResponse" name="fooResponse"/>
</wsdl_message>
<wsdl_porttype name="Foo">
<wsdl_operation name="foo">
<wsdl_input message="schema_fooRequest" name="fooRequest"/>
<wsdl_output message="schema_fooResponse" name="fooResponse"/>
</wsdl_operation>
</wsdl_porttype>
<wsdl_binding name="FooBinding" type="schema_Foo">
<soap_binding style="document" transport="http_//schemas.xmlsoap.org/soap/http"/>
<wsdl_operation name="foo">
<soap_operation soapAction=""/>
<wsdl_input name="fooRequest">
<soap_body use="literal"/>
</wsdl_input>
<wsdl_output name="fooResponse">
<soap_body use="literal"/>
</wsdl_output>
</wsdl_operation>
</wsdl_binding>
<wsdl_service name="FooService">
<wsdl_port binding="schema_FooBinding" name="FooPort">
<soap_address location="http_//localhost/APP/services"/>
</wsdl_port>
</wsdl_service>
</wsdl_definitions>
Note. Character “:” changed by “_” for visualization purpouses in “service.wsdl”
2. Generate JIBX binding
[Previous tasks: copy service.xsd file on JIBX home directory]
Command line (JIBX home)
Input: java -jar xsd2jibx.jar service.xsd
Output: com/bar/foo/binding.xml, com/bar/foo/FooRequest.java, com/bar/foo/FooRequestRequestData.java, com/bar/foo/FooRequestRequestHeader.java, com/bar/foo/FooResponse.java, com/bar/foo/FooResponseResponseData.java, com/bar/foo/FooResponseResponseHeader.java
3. Java compiler
Command line (JIBX home)
Input: javac -sourcepath com/bar/foo/*.java
Output: com/bar/foo/FooRequest.class, com/bar/foo/FooRequestRequestData.class, com/bar/foo/FooRequestRequestHeader.class, com/bar/foo/FooResponse.class, com/bar/foo/FooResponseResponseData.class, com/bar/foo/FooResponseResponseHeader.class
4. Binding compiler
Command line (JIBX home)
Input: java -jar jibx-bind.jar com/bar/foo/binding.xml
Output: com/bar/foo/JiBX_com_bar_foo_bindingFactory.class, com/bar/foo/JiBX_com_bar_foo_bindingFooRequest_access.class, com/bar/foo/JiBX_com_bar_foo_bindingFooRequestRequestData_access.class, com/bar/foo/JiBX_com_bar_foo_bindingFooRequestRequestHeader_access.class, com/bar/foo/JiBX_com_bar_foo_bindingFooResponse_access.class, com/bar/foo/JiBX_com_bar_foo_bindingFooResponseResponseData_access.class, com/bar/foo/JiBX_com_bar_foo_bindingFooResponseResponseHeader_access.class
5. Generate AXIS2 client
[Previous tasks: copy service.wsdl file, binding.xml (generated on step 2) and "com" folder (generated on step 4) on AXIS2 home directory]
Command line (AXIS2 home)
Input: wsdl2java -uri service.wsdl -o build -ss -sd -g -d jibx -ssi -Ebindingfile binding.xml
Output: build/src/com/bar/foo/FooService.java, build/src/com/bar/foo/FooServiceCallbackHandler.java, build/src/com/bar/foo/FooServiceMessageReceiverInOut.java, build/src/com/bar/foo/FooServiceSkeleton.java, build/src/com/bar/foo/FooServiceSkeletonInterface.java, build/src/com/bar/foo/FooServiceStub.java
6. AXIS2 Client usage
[Previous tasks: config a Java project including all the resources generated by now, JIBX libraries and AXIS2 libraries.]
import com.bar.foo;
FooRequest fooRequest = new FooRequest();
FooRequestRequestHeader fooRequestHeader = new FooRequestHeader();
fooRequestHeader.setType("1");
fooRequestHeader.setVersion("1");
FooRequestRequestData fooRequestData = new FooRequestData();
fooRequestData.setIdObject(1);
fooRequest.setRequestHeader(fooRequestHeader);
fooRequest.setRequestData(fooRequestData);
FooServiceStub fooStub = new FooServiceStub();
FooResponse fooResponse = fooStub.foo(fooRequest);
System.out.println(fooResponse.getResponseData().getName());
System.out.println(fooResponse.getResponseData().getAttributes());