[jboss-user] [JBossWS] - Unmarshalling and binding issues

magnus.ahlander do-not-reply at jboss.com
Tue Mar 13 04:32:24 EDT 2007


I'm using JAXWS 1.2 and I am trying to generate a web service client from a wsdl, it works but I have a couple of minor issues:

1) Unmarshalling does not find a needed class

Inside of my wsdl I have the following type:

...
  | <s:complexType name="ItemValue">
  |   <s:sequence>
  |     <s:element minOccurs="0" maxOccurs="1" name="DiagnosticInfo" type="s:string"/>
  |     <s:element minOccurs="0" maxOccurs="1" name="Value"/>
  |   </s:sequence>
  |   <s:attribute name="ItemName" type="s:string"/>
  | </s:complexType>
  | ...
wsconsume generates the following java class file

import javax.xml.bind.annotation.*;
  | 
  | @XmlAccessorType(XmlAccessType.FIELD)
  | @XmlType(name = "ItemValue", propOrder = {
  |     "value"
  | })
  | public class ItemValue {
  | 
  |     @XmlElement(name = "Value")
  |     protected Object value;
  |     @XmlAttribute(name = "ItemName")
  |     protected String itemName;
  | 
  |     //... getters and setters
  | }
Everything works fine if "value" is a java type, for instance float

<ItemValue xmlns='http://opcfoundation.org/webservices/XMLDA/1.0/' ItemName='Channel1.Device1.ComulativeElectric'>
  |   <Value xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:type='xsd:float'>6428.76806640625</Value>
  | </ItemValue>
However, if value is of some other generated type, in my case ArrayOfUnsignedInt, this class is not visible to the JAXBContent used at unmarshalling and the value is left unmarshalled (DOM element).

What is the proper way to provide JAXBContent with the extra class needed for unmarshalling?
I believe somewhere I would need to put something like:

JAXBContext jaxbContext = JAXBContext.newInstance(ItemValue.class, ArrayOfUnsignedInt.class);
Or is there some annotation that could be added to class ItemValue which would provide JAXB with the necessary information for unmarshalling? Or could I somehow modify the wsdl (created by a third party)?

2) Modifying binding

The received SOAP message contains a 64-bit value marked as 'xsd:float'

<ItemValue xmlns='http://opcfoundation.org/webservices/XMLDA/1.0/' ItemName='Channel1.Device1.ComulativeElectric'>
  |   <Value xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:type='xsd:float'>6428.76806640625</Value>
  | </ItemValue>
JAXB (correctly) unmarshals this value to 6428.768 (java.lang.Float).

What is the easiest way to override this binding (to say java.lang.Double) in a web service client?

Regards,

Magnus

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4027437#4027437

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4027437



More information about the jboss-user mailing list