[ 
https://issues.apache.org/jira/browse/CXF-5254?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13791458#comment-13791458
 ] 

Grzegorz Grzybek commented on CXF-5254:
---------------------------------------

Hello - here's a pull request: https://github.com/apache/cxf/pull/7.

All test cases pass, as well as Juergen's example.

The changes were quite complex wrt correct Corba-xml mapping.

Please see if this is right way to do this.

The least clean change is related to handling Corba structs derived from such 
XSD complex types:
{code:xml}
<xs:complexType>
   <xs:sequence>
      <!-- some non-sequence, non-array elements -->
      <xs:element name="x" type="x" minOccurs="0" maxOccurs="not 1" />
   </xs:sequence>
</xs:complexType>
{code}
because runtime representation is usually this:
{code:xml}
<root>
   <!-- some elements -->
   <x>a</x>
   <x>a</x>
   ...
</root>
{code}
but may also be this:
{code:xml}
<root>
   <!-- some elements -->
   <!-- no "x" element at all! -->
</root>
{code}
while writing to Corba stream there must be a sign that we're sending 0-size 
collection. The relevant changes (not so clean) are in 
{{org.apache.cxf.binding.corba.types.CorbaStructListener.processEndElement(QName)}}.

regards
Grzegorz Grzybek

> Unmarshall exception if a sequence<string> is used in a struct.
> ---------------------------------------------------------------
>
>                 Key: CXF-5254
>                 URL: https://issues.apache.org/jira/browse/CXF-5254
>             Project: CXF
>          Issue Type: Bug
>          Components: CORBA Binding
>    Affects Versions: 2.7.5, 2.7.6
>         Environment: JAVA7 / Windows 7
>            Reporter: Juergen Bockhorn
>            Priority: Blocker
>         Attachments: CorbaBugRepro.zip, CXF-5254.diff, patch.txt
>
>
> A server function returns a struct. This struct contains another struct which 
> contains a sequence<string>. Calling this method with a CXF/Corba-Client 
> leads to an unmarshall exception:
> {code}
> Warnung: Interceptor for 
> {http://cxf.apache.org/bindings/corba/idl/repro}repro.ServiceCORBAService#{http://cxf.apache.org/bindings/corba/idl/repro}getFirst
>  has thrown exception, unwinding now
> org.apache.cxf.interceptor.Fault: Unmarshalling Error: unerwartetes Element 
> (URI:"", lokal:"item"). Erwartete Elemente sind 
> <{http://cxf.apache.org/bindings/corba/idl/repro}id>,<{http://cxf.apache.org/bindings/corba/idl/repro}s1>
>  
>       at 
> org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:808)
>       at 
> org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:629)
>       at org.apache.cxf.jaxb.io.DataReaderImpl.read(DataReaderImpl.java:157)
>       at 
> org.apache.cxf.interceptor.BareInInterceptor.handleMessage(BareInInterceptor.java:138)
> ...
> {code}
> (sorry for german).
> Using a pure CORBA-client works.
> I will attach a repro project to this issue if I have figured out how it 
> works :-)



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to