advertisement
javaboutique
Search Tips
Articles  |   Tutorials  |   Reviews  |   Tools  |   by Category  |   by Date  |   by Name  |   Submit  |   Source  |   Forums  |  
javaboutique
Browse DevX


Partners & Affiliates











advertisement

Tutorials : Using SOAP with Java :

Binary data-types

Apache SOAP implementation also allows you to send binary-data in one of the following forms

  • Byte arrays
  • Hexadecimal Strings
  • MIME attachments

The Hexadecimal Strings are encoded with org.apache.soap.encoding.Hex wrappers object and this is the class that gets De-serialized. The Apache SOAP implementation supports embedding a SOAP envelope within a MIME type, and binary data then can be carried as a MIME attachment.

Serialization and Deserialization mechanism in Apache SOAP

With the above concept in mind, now it is time to look at how exactly Apache SOAP handles the (De-)Serialization of data-types. In order to make the (De-)Serialization work the Apache SOAP relies on a type mapping registry which defines the (De-)Serializers and maps them against different data-types. This registry is an instance of the class org.apache.soap.encoding.SOAPmappingRegistry. This registry internally maintains four different Hashtables

  1. Hashtable for Serializers
  2. Hashtable for DeSerializers
  3. Hastable for Java2XML
  4. Hashtable for XML2Java

Hashtable 1 maintains a collection of objects that implement the org.apache.soap.util.Serializer interface and Hashtable 3 maintains a collection of Qnames. The Hashtable 1 and 3 are keyed upon a shared String, which is the encodingStyleURI say "s". If we take an example user-defined data-type UDType and the corresponding Serializer as UDSerializer, then

In Hashtable 1

s-> UDSerializer

In Hashtable 3

s-> UDType.class

The other two Hashtables hold the objects required for Deserialization information as exactly as described above for the Serialization information.


To serialize or deserialize a Java object, the registry returns the Qname and the Serializer /DeSerializer object to the caller class. The returned Serializer/Deserializer class is then called to serializer or deserialize the data-type. In the SOAP client that is why we need to exploit a mechanism to define these type mappings in the resgistry and also register to the mapping registry any custom serializers/deserializers that we develop.

An example

Take a deep breath in. You have just been through some very complex material, squeezed in a very short space. If that is not very clear at the moment, don’t worry. Once you look at this example and then go back to that, things might be clearer. Now we will modify our previous example (in part 1) where we will use a Person object as a parameter to our "greetingService" remote SOAP service.We will create a Person java bean. As we have discussed earlier, if we want to use the BeanSerializer class to serialize our Person bean, then the Person class will have to adhere to the java bean specification. More strictly, it has to have a no argument default constructor and a getter and setter method(s) for all its properties.

public class Person extends Object {

    /** Holds value of property name. */
    public String name;
    
    /** Holds value of property age. */
    public int age;
    
    /** Creates new Name */
    public person() {
    }

    /** Getter for property name.
     * @return Value of property name.
 */
    public String getName() {
        return name;
    }
    
    /** Setter for property name.
     * @param name New value of property name.
 */
    public void setName(String name) {
        this.name = name;
    }
    
    /** Getter for property age.
     * @return Value of property age.
 */
    public int getAge() {
        return age;
    }
    
    /** Setter for property age.
     * @param age New value of property age.
 */
    public void setAge(int age) {
        this.age = age;
    }
    
}

We will modify our remote service in such a way that now it accepts the Person object as a parameter.

public class SoapService extends Object {

    /** Creates new SoapService */
    public SoapService() {
    }
    
    /** the remote method accepting a Person object
    */
    public String sayGreeting(Person name)
    {
        return "Hello dear "+name.getName()+" you are really"+name.getAge();
    }
}

All done and now we concentrate on our deployment descriptor. The deployment descriptor now has to explicitly define the <isd:mappings> element. As you see below that the mappings element defines the serializer, and the deserializer to use, and in this case they are the class org.apache.soap.encoding.soapenc.BeanSerializer.

<isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment" 
	id="urn:greetingService">
  <isd:provider type="java" scope="Application" methods="sayGreeting">
    <isd:java class="sam.soap.service.SoapService" static="false"/>
  </isd:provider> 
<isd:mappings>
    <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
             xmlns:x="urn:greetingService" qname="x:sam.soap.client.Person"
             javaType="sam.soap.client.Person"
             java2XMLClassName="org.apache.soap.encoding.soapenc.BeanSerializer"
             xml2JavaClassName="org.apache.soap.encoding.soapenc.BeanSerializer"/>
  </isd:mappings>    
</isd:service>

How to Add Java Applets to Your Site

New on the Java Boutique:

New Review:

Time Management Made Easy with the Quartz Enterprise Job Scheduler
Why not just use the Java timer API? This open source scheduling API boasts simplicity, ease-of-integration, a well-rounded feature set, and it's free!

New Applet:

Reverse Complement
Reverse Complement is a simple applet that converts DNA or RNA sequences into three useful formats.

Elsewhere on internet.com:

WebDeveloper Java
Lots of Java information on webdeveloper.com

WDVL Java
Thorough Java resource at the Web Developer's Virtual Library.

ScriptSearch Java
Hundreds of free Java code files to download.

jGuru: Your View of the Java Universe
Customizable portal with online training, FAQs, regular news updates, and tutorials.

 Microsoft Visual Studio 2010 Showcase
 Avaya Developer Showcase
 MSDN Spotlight
 PHP for Windows Showcase
XML error: undefined entity at line 39
advertisement
Receive Articles via our XML/RSS feed
Receive Articles via our XML/RSS feed

JavaBytes
Internet Cyclone
This powerful, easy-to-use, internet optimizer is for Windows 95, 98, ME, NT, 2000 and XP. It's designed to automatically optimize your Windows settings, boosting your Internet connection up to 200%.

Windows 7: From Beta to Final Code in One Year
Google Shows Off Chrome OS, Releases Source
Microsoft Shows Off Silverlight 4, IE9 Plans
Metasploit Expands Vulnerability Test Framework
HyperCard Reborn?
Fedora 12 Takes Aim at Linux Networking
Top Supercomputer Nearly Doubles in Speed
Fedora 12 Linux Tackles Virtualization
Apple Gives iPhone Developers App Status Tracker
Novell Sets OpenSUSE 11.2 Free

Creating Custom Export Filters for StarOffice with XSLT
WPF Wonders: Using DataTemplates
Crystal Reports Family Offers Options for Developers
Avaya Aura Session Manager video
Avaya Aura Overview video
Exploring HTML 5's Audio/Video Multimedia Support
Overriding Virtual Functions? Use C++0x Attributes to Avoid Bugs.
Understanding the Cloud Computing Security Vulnerabilities
Cisco and IBM Target a Greener World
Upgrade to Visual Studio 2010 with the Ultimate Offer

Advertising Info  |   Member Services  |   Contact Us  |   Help  |   Feedback  |   Site Map  |   Network Map  |   About

internet.commediabistro.comJusttechjobs.comGraphics.com

Search:

WebMediaBrands Corporate Info

Legal Notices, Licensing, Permissions, Privacy Policy.
Advertise | Newsletters | Shopping | E-mail Offers | Freelance Jobs