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

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

All the problems are explained with this diff (against {{3.0.0-SNAPSHOT}}):
{noformat}
diff --git 
a/rt/bindings/corba/src/main/java/org/apache/cxf/binding/corba/types/CorbaStructEventProducer.java
 
b/rt/bindings/corba/src/main/java/org/apache/cxf/binding/corba/types/CorbaStructEventProducer.java
index f4b1304..e07975e 100644
--- 
a/rt/bindings/corba/src/main/java/org/apache/cxf/binding/corba/types/CorbaStructEventProducer.java
+++ 
b/rt/bindings/corba/src/main/java/org/apache/cxf/binding/corba/types/CorbaStructEventProducer.java
@@ -52,8 +52,7 @@ public class CorbaStructEventProducer extends 
AbstractStartEndEventProducer {
                 && (CorbaHandlerUtils.isPrimitiveIDLTypeSequence(obj))
                 && (!((CorbaSequenceHandler)obj).getElements().isEmpty())
                 && (!CorbaHandlerUtils.isOctets(obj.getType()))) {
-                currentEventProducer =
-                    new CorbaPrimitiveSequenceEventProducer(obj, serviceInfo, 
orb);
+                currentEventProducer = new CorbaSequenceEventProducer(obj, 
serviceInfo, orb);
             } else if 
(obj.getSimpleName().equals(obj.getIdlType().getLocalPart() + "_f")) {
                 //some "special cases" we need to make sure are mapped 
correctly
{noformat}

the problem is that when the {{obj}} becomes {{CorbaSequenceHandler}}, the 
_special case_ creates {{CorbaPrimitiveSequenceEventProducer}} which skips the 
"s1" event for the sequence contained in "deep" struct. In consequence JAXB 
complains about illegal "item" element when it expected one of "deep/id" and 
"deep/s1" - handler for s1 doesn't produce necessary wrapper element for the 
sequence.

I've extended the {{repro.idl}}:
{code}
...
        struct Deep2 { 
                Strings s2;
        };
        struct Deeper {
                long id;
                Deep deep; 
                Deep2 deep2; 
        };
{code}
to check what is the _special case_ when struct contains the sequence *only*. 
In that case "s2" element also should be cause the event to be produced.

So I think it's enough to create {{CorbaSequenceEventProducer}} instead of 
{{CorbaPrimitiveSequenceEventProducer}}. Unless someone (Daniel Kulp) explains 
what was that "Special case for primitive sequence inside struct" for.

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
>
>
> 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