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

Sanjay Gautam updated CXF-6197:
-------------------------------
    Attachment: object-Item-Inspect.png

> Although the Parts classes are same PhaseInterceptorChain not able to 
> recognize it that they are bother same object of same class type
> --------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CXF-6197
>                 URL: https://issues.apache.org/jira/browse/CXF-6197
>             Project: CXF
>          Issue Type: Bug
>          Components: JAXB Databinding, Soap Binding
>    Affects Versions: 3.0.1, 2.7.14
>         Environment: JBPM 6.1.0.Final and CXF and wildfly 8.2.0 
>            Reporter: Sanjay Gautam
>         Attachments: object-Item-Inspect.png, typeClass-debug-inspect.png
>
>
> JBPM using the call like this below 
> I don't see any issue with the client code and the cxf not able to figure out 
> that that two instance are same. 
> Cxf using the comparison method exactly at this place fails 
> ClientImpl.java 
>    private void checkPart(MessagePartInfo part, Object object) {
>         if (part == null || part.getTypeClass() == null || object == null) {
>             return;
>         }
>         Class<?> typeClass = part.getTypeClass();
>         if (typeClass == null) {
>             return;
>         }
>         if (typeClass.isPrimitive()) {
>             if (typeClass == Long.TYPE) {
>                 typeClass = Long.class;
>             } else if (typeClass == Integer.TYPE) {
>                 typeClass = Integer.class;
>             } else if (typeClass == Short.TYPE) {
>                 typeClass = Short.class;
>             } else if (typeClass == Byte.TYPE) {
>                 typeClass = Byte.class;
>             } else if (typeClass == Character.TYPE) {
>                 typeClass = Character.class;
>             } else if (typeClass == Double.TYPE) {
>                 typeClass = Double.class;
>             } else if (typeClass == Float.TYPE) {
>                 typeClass = Float.class;
>             } else if (typeClass == Boolean.TYPE) {
>                 typeClass = Boolean.class;
>             }
>         } else if (typeClass.isArray() && object instanceof Collection) {
>             //JAXB allows a pseudo [] <--> List equivalence
>             return;
>         }
>         if (!typeClass.isInstance(object)) {
>             throw new IllegalArgumentException("Part " + part.getName() + " 
> should be of type " 
>                 + typeClass.getName() + ", not " 
>                 + object.getClass().getName());
>         }
>     }
>  
> #######   CODE SNIPPETS  ########
>  public void executeWorkItem(WorkItem workItem, final WorkItemManager 
> manager) {
>       Object[] parameters = null;
>         String interfaceRef = (String) workItem.getParameter("Interface");
>         String operationRef = (String) workItem.getParameter("Operation");
>         String endpointAddress = (String) workItem.getParameter("Endpoint");
>         if ( workItem.getParameter("Parameter") instanceof Object[]) {
>               parameters =  (Object[]) workItem.getParameter("Parameter");
>         } else if (workItem.getParameter("Parameter") != null && 
> workItem.getParameter("Parameter").getClass().isArray()) {
>               int length = 
> Array.getLength(workItem.getParameter("Parameter"));
>             parameters = new Object[length];
>             for(int i = 0; i < length; i++) {
>               parameters[i] = Array.get(workItem.getParameter("Parameter"), 
> i);
>             }            
>         } else {
>               parameters = new Object[]{ workItem.getParameter("Parameter")};
>         }
>         
>         String modeParam = (String) workItem.getParameter("Mode");
>         WSMode mode = WSMode.valueOf(modeParam == null ? "SYNC" : 
> modeParam.toUpperCase());
>             
>         try {
>              Client client = getWSClient(workItem, interfaceRef);
>              if (client == null) {
>                  throw new IllegalStateException("Unable to create client for 
> web service " + interfaceRef + " - " + operationRef);
>              }
>              //Override endpoint address if configured.
>              if (endpointAddress != null && !"".equals(endpointAddress)) {
>                client.getRequestContext().put(Message.ENDPOINT_ADDRESS, 
> endpointAddress) ;
>              }
>              
>              switch (mode) {
>                 case SYNC:
>                     Object[] result = client.invoke(operationRef, parameters);
>                     
>                     Map<String, Object> output = new HashMap<String, 
> Object>();          
>    
>                     if (result == null || result.length == 0) {
>                       output.put("Result", null);
>                     } else {
>                         output.put("Result", result[0]);
>                     }
>                     logger.debug("Received sync response {} completeing work 
> item {}", result, workItem.getId());
>                     manager.completeWorkItem(workItem.getId(), output);
>                     break;
> -------------------------------
>  protected synchronized Client getWSClient(WorkItem workItem, String 
> interfaceRef) {
>         if (clients.containsKey(interfaceRef)) {
>             return clients.get(interfaceRef);
>         }
>         
>         String importLocation = (String) workItem.getParameter("Url");
>         String importNamespace = (String) workItem.getParameter("Namespace");
>         if (importLocation != null && importLocation.trim().length() > 0 
>                       && importNamespace != null && 
> importNamespace.trim().length() > 0) {
>               Client client = dcf.createClient(importLocation, new 
> QName(importNamespace, interfaceRef), getInternalClassLoader(), null);
>             clients.put(interfaceRef, client);
>             return client;
>         }
>         
>         
>         long processInstanceId = ((WorkItemImpl) 
> workItem).getProcessInstanceId();
>         WorkflowProcessImpl process = ((WorkflowProcessImpl) 
> ksession.getProcessInstance(processInstanceId).getProcess());
>         List<Bpmn2Import> typedImports = 
> (List<Bpmn2Import>)process.getMetaData("Bpmn2Imports");
>         
>         if (typedImports != null ){
>             Client client = null;
>             for (Bpmn2Import importObj : typedImports) {
>                 if (WSDL_IMPORT_TYPE.equalsIgnoreCase(importObj.getType())) {
>                     try {
>                         client = dcf.createClient(importObj.getLocation(), 
> new QName(importObj.getNamespace(), interfaceRef), getInternalClassLoader(), 
> null);
>                         clients.put(interfaceRef, client);
>                         return client;
>                     } catch (Exception e) {
>                       logger.error("Error when creating WS Client", e);
>                         continue;
>                     }
>                 }
>             }
>         }
>         return null;
>     }
> XXXXXXXXXXXXXX  ERROR  XXXXXXXXXXXXXXXXXXXXXXXXX
> 19:16:26,899 WARNING [org.apache.cxf.phase.PhaseInterceptorChain] (default 
> task-29) Interceptor for 
> {http://mdsoasis.caiso.com/}MdsOasisServiceService#{http://mdsoasis.caiso.com/}saveOrUpdateOasisNoti
> fication has thrown exception, unwinding now: 
> java.lang.IllegalArgumentException: Part {http://mdsoasis.caiso.com/}arg0 
> should be of type com.caiso.mdsoasis.OasisNotificationCtlDto, not 
> com.caiso.mdso
> asis.OasisNotificationCtlDto
>         at 
> org.apache.cxf.jaxb.io.DataWriterImpl.checkPart(DataWriterImpl.java:277) 
> [cxf-rt-databinding-jaxb-3.0.1.jar:3.0.1]
>         at 
> org.apache.cxf.jaxb.io.DataWriterImpl.write(DataWriterImpl.java:209) 
> [cxf-rt-databinding-jaxb-3.0.1.jar:3.0.1]
>         at 
> org.apache.cxf.interceptor.AbstractOutDatabindingInterceptor.writeParts(AbstractOutDatabindingInterceptor.java:121)
>  [cxf-core-3.0.1.jar:3.0.1]
>         at 
> org.apache.cxf.binding.soap.interceptor.RPCOutInterceptor.handleMessage(RPCOutInterceptor.java:112)
>  [cxf-rt-bindings-soap-3.0.1.jar:3.0.1]
>         at 
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
>  [cxf-core-3.0.1.jar:3.0.1]
>         at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:514) 
> [cxf-core-3.0.1.jar:3.0.1]
>         at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:423) 
> [cxf-core-3.0.1.jar:3.0.1]
>         at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:326) 
> [cxf-core-3.0.1.jar:3.0.1]
>         at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:279) 
> [cxf-core-3.0.1.jar:3.0.1]
>         at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:299) 
> [cxf-core-3.0.1.jar:3.0.1]
>         at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:285) 
> [cxf-core-3.0.1.jar:3.0.1]
>         at 
> org.jbpm.process.workitem.webservice.WebServiceWorkItemHandler.executeWorkItem(WebServiceWorkItemHandler.java:113)
>  [jbpm-workitems-6.1.0.Final.jar:6.1.0.Final]
>         at 
> org.drools.persistence.jpa.processinstance.JPAWorkItemManager.internalExecuteWorkItem(JPAWorkItemManager.java:54)
>  [drools-persistence-jpa-6.1.0.Final.jar:6.1.0.Final]
>         at 
> org.jbpm.workflow.instance.node.WorkItemNodeInstance.internalTrigger(WorkItemNodeInstance.java:133)
>  [jbpm-flow-6.1.0.Final.jar:6.1.0.Final]
>         at 
> org.jbpm.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:162)
>  [jbpm-flow-6.1.0.Final.jar:6.1.0.Final]
>         at 
> org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerNodeInstance(NodeInstanceImpl.java:354)
>  [jbpm-flow-6.1.0.Final.jar:6.1.0.Final]
>         at 
> org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerCompleted(NodeInstanceImpl.java:313)
>  [jbpm-flow-6.1.0.Final.jar:6.1.0.Final]
>         at 
> org.jbpm.workflow.instance.node.ActionNodeInstance.triggerCompleted(ActionNodeInstance.java:61)
>  [jbpm-flow-6.1.0.Final.jar:6.1.0.Final]
>         at 
> org.jbpm.workflow.instance.node.ActionNodeInstance.internalTrigger(ActionNodeInstance.java:57)
>  [jbpm-flow-6.1.0.Final.jar:6.1.0.Final]
>         at 
> org.jbpm.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:162)
>  [jbpm-flow-6.1.0.Final.jar:6.1.0.Final]
>         at 
> org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerNodeInstance(NodeInstanceImpl.java:354)
>  [jbpm-flow-6.1.0.Final.jar:6.1.0.Final]
>         at 
> org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerConnection(NodeInstanceImpl.java:369)
>  [jbpm-flow-6.1.0.Final.jar:6.1.0.Final]
>         at 
> org.jbpm.workflow.instance.node.SplitInstance.executeStrategy(SplitInstance.java:117)
>  [jbpm-flow-6.1.0.Final.jar:6.1.0.Final]
>         at 
> org.jbpm.workflow.instance.node.SplitInstance.internalTrigger(SplitInstance.java:63)
>  [jbpm-flow-6.1.0.Final.jar:6.1.0.Final]
>         at 
> org.jbpm.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:162)
>  [jbpm-flow-6.1.0.Final.jar:6.1.0.Final]
>         at 
> org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerNodeInstance(NodeInstanceImpl.java:354)
>  [jbpm-flow-6.1.0.Final.jar:6.1.0.Final]
>         at 
> org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerCompleted(NodeInstanceImpl.java:313)
>  [jbpm-flow-6.1.0.Final.jar:6.1.0.Final]
>         at 
> org.jbpm.workflow.instance.node.ActionNodeInstance.triggerCompleted(ActionNodeInstance.java:61)
>  [jbpm-flow-6.1.0.Final.jar:6.1.0.Final]
>         at 
> org.jbpm.workflow.instance.node.ActionNodeInstance.internalTrigger(ActionNodeInstance.java:57)
>  [jbpm-flow-6.1.0.Final.jar:6.1.0.Final]
>         at 
> org.jbpm.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:162)
>  [jbpm-flow-6.1.0.Final.jar:6.1.0.Final]
>         at 
> org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerNodeInstance(NodeInstanceImpl.java:354)
>  [jbpm-flow-6.1.0.Final.jar:6.1.0.Final]
>         at 
> org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerCompleted(NodeInstanceImpl.java:313)
>  [jbpm-flow-6.1.0.Final.jar:6.1.0.Final]
>         at 
> org.jbpm.workflow.instance.node.StartNodeInstance.triggerCompleted(StartNodeInstance.java:66)
>  [jbpm-flow-6.1.0.Final.jar:6.1.0.Final]
>         at 
> org.jbpm.workflow.instance.node.StartNodeInstance.internalTrigger(StartNodeInstance.java:43)
>  [jbpm-flow-6.1.0.Final.jar:6.1.0.Final]



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to