JAX-WS and type substitution
Posted by kohlert on October 2, 2006 at 12:45 PM EDT
Currently, JAX-WS does not support type substitution in cases where Java types are used at runtime that are not directly or indirectly referenced by the SEI. The reason for this is because you must specify all of the types that will be used at runtime at the time the JAXBContext is created. Since JAX-WS can only introspect the SEI there is no way to determine what other classes the developer may use at runtime. Take the following SEI for example.
@WebService
public interface MyEndpoint {
public Shape echo(Shape);
}
abtract class Shape {}
but the following classes are also used by the application:
class Square extends Shape; class Circle extends Shape;In the current JAX-WS implementation only the
Shape class can be used.
We have the same problem when starting from WSDL and schema; only the schema types referenced by the
wsdl:Port will be visible to the JAX-WS runtime.
In short, we need to solve two related problems:
- How can we allow the Java application developer to specify additional classes that should be used by a JAX-WS application?
- When importing a WSDL, how can we tell the JAX-WS and JAXB runtime that there are additional Java types available that are not referenced by the generated SEI?
@XmlSeeAlso annotation.
package javax.xml.bind.annotations;
@Target({ElementType.TYPE})
public @interface XmlSeeAlso {
Class[] value();
}
This annotation will be allowed on any JAXB-bound type, and when JAXB binds that type, classes listed in @XmlSeeAlso will be also bound. So this can be used like this:
@XmlSeeAlso({Bar.class,Zot.class})
abstract class Foo {}
class Bar extends Foo {}
class Zot extends Foo {}
and "JAXBContext.newInstance(Foo.class)" will include all three classes. (Without @XmlSeeAlso annotation on Foo, JAXBContext.newInstance(Foo.class) will include only Foo.)
JAX-WS 2.1 will allow developers to place this annotation on a SEI.
JAX-WS will then read this annotation at runtime making sure to pass all
of the classes referenced by this annotation to the JAXBContext.
When importing a WSDL that contains types that are not directly referenced by the endpoint definition, JAX-WS 2.1 will generate
@XmlSeeAlso annotation on the SEI. This @XmlSeeAlso annotation will
reference all of the ObjectFactories generated by JAXB. For example
@WebService
@XmlSeeAlso({package1.ObjectFactory.class, package2.ObjectFactory.class})
public interface MyEndpoint {
...
}
Technorati: JSR JCP JAX JAXWS Web Services Glassfish
Related Topics >>
Blog Links >>
- Login or register to post comments
- Printer-friendly version
- kohlert's blog
- 4310 reads






Comments
<p>Hey, thanks a lot for the tip, seems that i had a ...
by sombriks - 2011-04-16 11:53
Hey, thanks a lot for the tip, seems that i had a portable EAR running on this ploblem. In Glassfish 3.1 the app works perfectly but on WebSphere 7.0 only after that modification the app ran without problems.