cxf-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kirill R." <bobr...@gmail.com>
Subject Problem: Character content of elements discarded during unmarshalling
Date Tue, 10 Feb 2009 10:12:18 GMT

Hello everyone,

(crossposted this in JAXB impl support forum at java.net because I'm not
sure where this
question belongs)

Tough problem here, no idea how to tackle it:

I'm running a web service using CXF (2.1.3, JAXB impl 2.1.7) and JAX-WS
annotated classes.
During processing of an incoming request, some fields which are present in
the request end up
being null in the resulting POJO passed to the web method of service
implementation.

For the request below (sent by both the actual client of our service and by
SoapUI with some
modifications based on a wild guess - redundant namespace prefixes or the
cryptic xs:string
in the end removed), debugging revealed that content of every element inside
ExtScanResult
is discarded (the condition in StAXStreamConnector.handleCharacters isn't
met) and, as a result,
the entire extScanResult field ends up being null as all of its own fields
are null.

deviceId, port, taskType and timestamp are assigned correct values, but not
the other fields.

SOAP/WSDL exceprts with comments below:

Request:

<?xml version="1.0" encoding="UTF-16"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
        <ns2:result xmlns:ns2="http://acme.com">
            <deviceId>2</deviceId>
            <port>1</port>
            <result>
                <taskType>OBSERVE</taskType>
                <timestamp>2009-02-10T10:17:04.024+0300</timestamp>
                <ns2:ExtScanResult>
                    <channelId>R47</channelId>
                    <channelType>SECAM</channelType>
                    <ns2:AnalogResult>
                        <videoLevel>1.27</videoLevel>
                        <primaryAudioLevel>128.27</primaryAudioLevel>
                       
<videoToPrimaryAudioRatio>127.0</videoToPrimaryAudioRatio>
                        <secondaryAudioLevel>INF</secondaryAudioLevel>
                       
<videoToSecondaryAudioRatio>INF</videoToSecondaryAudioRatio>
                       
<videoSignalToNoiseRatio>0.0</videoSignalToNoiseRatio>
                       
<maxDeltaBetweenAdjacentVideo>0.0</maxDeltaBetweenAdjacentVideo>
                    </ns2:AnalogResult>
                    <xs:string xmlns:xs="http://www.w3.org/2001/XMLSchema"/>
                </ns2:ExtScanResult>
            </result>
        </ns2:result>
    </S:Body>
</S:Envelope>

Schema:

Web method request wrapper

    <xs:complexType name="result">
        <xs:sequence>
            <xs:element minOccurs="0" name="deviceId" type="xs:string"/>
            <xs:element name="port" type="xs:int"/>
            <xs:element minOccurs="0" name="result"
type="tns:MeasurementTaskResult"/>
        </xs:sequence>
    </xs:complexType>

and the types it references

    <xs:complexType name="MeasurementTaskResult">
        <xs:sequence>
            <xs:element name="taskType" type="xs:string"/>
            <xs:element name="timestamp" type="xs:string"/>
            <xs:element maxOccurs="unbounded" minOccurs="0"
name="quickScanResult" nillable="true" type="tns:ScanResultItem"/>
            <xs:element minOccurs="0" name="extScanResult" nillable="true"
type="tns:ExtScanResult"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="ExtScanResult">
        <xs:sequence>
            <xs:element minOccurs="0" name="channelId" type="xs:string"/>
            <xs:element minOccurs="0" name="channelType" type="xs:string"/>
            <xs:element minOccurs="0" name="analogResult" nillable="true"
type="tns:AnalogResult"/>
            <xs:element minOccurs="0" name="digitalMeasurementMode"
nillable="true" type="xs:string"/>
            <xs:element minOccurs="0" name="digitalLevelsResult"
nillable="true" type="tns:DigitalLevelsResult"/>
            <xs:element minOccurs="0" name="digitalQAMResult"
nillable="true" type="tns:DigitalQAMResult"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="AnalogResult">
        <xs:sequence>
            <xs:element name="videoLevel" type="xs:float"/>
            <xs:element name="primaryAudioLevel" type="xs:float"/>
            <xs:element name="videoToPrimaryAudioRatio" type="xs:float"/>
            <xs:element name="secondaryAudioLevel" type="xs:float"/>
            <xs:element name="videoToSecondaryAudioRatio" type="xs:float"/>
            <xs:element name="videoSignalToNoiseRatio" type="xs:float"/>
            <xs:element name="maxDeltaBetweenAdjacentVideo"
type="xs:float"/>
        </xs:sequence>
    </xs:complexType>

So is there something wrong with the schema generated by CXF, or the
request? Or is the problem elsewhere?

I can post the JAX-WS annotated Java classes used by our service if it is
necessary, but the other party's
client for our web service was developed using this schema, not our Java
code.

-- 
View this message in context: http://www.nabble.com/Problem%3A-Character-content-of-elements-discarded-during-unmarshalling-tp21930755p21930755.html
Sent from the cxf-user mailing list archive at Nabble.com.


Mime
View raw message