[ 
https://issues.apache.org/jira/browse/CXF-1294?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Benson Margulies resolved CXF-1294.
-----------------------------------

       Resolution: Fixed
    Fix Version/s: 2.1
         Assignee: Daniel Kulp  (was: Benson Margulies)

Dan might port this to 2.0.4.

> Problem creating several custom Headers
> ---------------------------------------
>
>                 Key: CXF-1294
>                 URL: https://issues.apache.org/jira/browse/CXF-1294
>             Project: CXF
>          Issue Type: Bug
>    Affects Versions: 2.0.3
>         Environment: Windows XP SP2, Eclipse 3.3, JAVA 1.6.03
>            Reporter: Tim
>            Assignee: Daniel Kulp
>             Fix For: 2.1
>
>
>   Hi all,
> we generated a Java WS Client from given wsdl-files, which should generate a 
> SOAP Request with several Header entries.
> At runtime one of two headers was dropped in the request.
> Excerpt from generated Code:
> <code>
> public interface TelematikSignedPortType {
>     @RequestWrapper(localName = "TelematikExecute", targetNamespace = 
> "http://ws.gematik.de/tel/transport/v1.2";, className = 
> "de.gematik.ws.tel.transport.v1.TelematikExecuteType")
>     @ResponseWrapper(localName = "TelematikExecuteResponse", targetNamespace 
> = "http://ws.gematik.de/tel/transport/v1.2";, className = 
> "de.gematik.ws.tel.transport.v1.TelematikExecuteType")
>     @WebMethod(operationName = "TelematikExecute", action = 
> "http://ws.gematik.de/tel/transportWSDL/v1.4#telematikexecute";)
>     public void telematikExecute(
>         @WebParam(targetNamespace = 
> "http://ws.gematik.de/tel/transport/v1.2";, name = "Payload", mode = 
> Mode.INOUT)
>         
> javax.xml.ws.Holder<de.gematik.ws.tel.transport.v1.TelematikExecuteType.Payload>
>  payload,
>         @WebParam(targetNamespace = 
> "http://ws.gematik.de/tel/transport/v1.2";, name = "TransportHeader", header = 
> true, mode = Mode.INOUT)
>         javax.xml.ws.Holder<de.gematik.ws.tel.transport.v1.TransportHeader> 
> transportHeader,
>         @WebParam(targetNamespace = 
> "http://ws.gematik.de/tel/transport/v1.2";, name = "TelematikHeader", header = 
> true, mode = Mode.INOUT)
>         javax.xml.ws.Holder<de.gematik.ws.tel.transport.v1.TelematikHeader> 
> telematikHeader
>     ) throws FaultMessage;
> }
> </code>
> This issue seems to be related to filling the AbstractMessageContainer with 
> MessageParts. This is done several times in the case of headers, overwriting  
> existing indices with the container's current size. As a result the 
> WrapperMsgInfo in WrapperClassOutInterceptor.java gets corrupted index 
> values, so that the first header is overwritten by the second one and so on.
> <code>
>               for (MessagePartInfo p : messageInfo.getMessageParts()) {
>                                       if (Boolean.TRUE.equals(p
>                                                       
> .getProperty(ReflectionServiceFactoryBean.HEADER))) {
>                                               MessagePartInfo mpi = 
> wrappedMsgInfo.getMessagePart(p
>                                                               .getName());
>                                                 // MPI HAS CORRUPTED INDEX!
>                                               if (objs.hasValue(p)) {
>                                                       newObjs.put(mpi, 
> objs.get(p));
>                                               }
>                                       }
>                               }
> </code>
> Suggested Hotfix AbstractMessageContainer.jaa
> <code>
>       public void addMessagePart(MessagePartInfo part) {
>                 // KEEP EXISTING INDEX IF ANY
>               if (messageParts.containsKey(part.getName())) {
>                       
> part.setIndex(messageParts.get(part.getName()).getIndex());
>               } else {
>                       part.setIndex(messageParts.size());
>               }
>               messageParts.put(part.getName(), part);
>       }
> </code>
> Thx for looking into this, keep up the good work.
> cheers,
> Timmeh and Simon.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to