SOAP JAX-RPC JAXB JAX-WS

Technical background  By ngoc.giang.nguyen and W.ZH

This section reviews some related technologies.

SOAP

SOAP is the protocol that specifies how a exchanged message between client and web service should be formed. Currently, there are 2 versions of SOAP being used: SOAP 1.1 and SOAP 1.2. The differences between SOAP 1.1 and SOAP 1.2 are usually irrelevant to end-users. For further information, please refer to this article.
When exposing a function, the web service always specifies which SOAP version the client should use to form the invocation message. It is done by supplying the appropriate namespace to the binding tag. E.g, for SOAP 1.2, the namespace should be http://schemas.xmlsoap.org/wsdl/soap12/; while for SOAP 1.1, the namespace should be http://schemas.xmlsoap.org/wsdl/soap/. The message sent by the client to a web service function must be of the same SOAP version with that function.
SOAP 1.2 is supported by most of the application servers such as OC4J and WebLogic?.

JAX-RPC

JAX-RPC is the protocol that specifies how to invoke a web service function. It can be seen as the bridge between WSDL, the guy who talks in business terms, and the application server, the guys who talks in technical terms. Using JAX-RPC tool, from a WSDL, we can generate a set of Java code understood by the application server.
JAX-RPC is good in communication, but it attempts to do extra thing, i.e. generating the mapping from WSDL data types to Java, and does it very badly. Not all types defined in WSDL are generated. The generation is done in a best-effort basis. When a type cannot be generated, a generic type (SOAPElement) is used instead. As a result, generated code is often unusable, or users have to do manual mapping on unsupported data types. In short, JAX-RPC mapping technology is an evolutionary dead-end, and soon people will move away from it.
JAX-RPC is the current web service standard and is fully supported by most applications servers such as OC4J and WebLogic?.

JAXB

JAXB is the XML mapping framework. The beauty of JAXB is that it bases on XML schema instead of predefined type as in JAX-RPC. Given an arbitrary XML schema, JAXB can generate corresponding Java code. At runtime, an XML string can be parsed again the schema to obtain Java object, and vice versa.
JAXB is a standalone technology and is not necessarily affiliated with web service.
There are 2 available versions of JAXB: JAXB 1.0 and JAXB 2.0. Oracle XDK 10g supports JAXB 1.0 only, while WebLogic? supports JAXB 2.0.

http://www.java.net/forum/topic/glassfish/metro-and-jaxb/customizing-jaxb-marshalled-xml-0
http://blogs.sun.com/enterprisetechtips/entry/customizing_jaxb
http://www.func.nl/community/knowledgebase/customize-namespace-prefix-when-marshalling-jaxb

==================== JAXB in Jdev 11g ==============================
http://technology.amis.nl/blog/3221/how-to-quickly-generate-an-xsd-xml-schema-definition-based-on-a-java-class-model-using-jdeveloper-11g
http://biemond.blogspot.com/2008/02/jaxb-20-in-jdeveloper-10g-and-11g.html
http://download.oracle.com/javase/6/docs/api/javax/xml/bind/Marshaller.html

JAX-WS

JAX-WS is the marriage of JAX-RPC communication (which is the good part of JAX-RPC) and JAXB data binding. Therefore, it is much more superior than JAX-RPC and become standard in Jdeveloper 11g.
JAX-WS is only supported in Weblogic 10 and Oracle 11g onwards.

Advertisements