Programming and So

Tips and tricks in Java

Posts Tagged ‘axis

AXIS2 + JIBX web service client step by step

without comments

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());

Written by angelborroy

January 15, 2009 at 5:52 pm

Posted in java

Tagged with , ,