You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Daniel Kulp (JIRA)" <ji...@apache.org> on 2017/03/23 17:47:42 UTC

[jira] [Resolved] (CXF-6197) Although the Parts classes are same PhaseInterceptorChain not able to recognize it that they are bother same object of same class type

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

Daniel Kulp resolved CXF-6197.
------------------------------
       Resolution: Incomplete
    Fix Version/s:     (was: NeedMoreInfo)
                   Invalid


Need a testcase to show there is a problem.  Very old issue.

> 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
>             Fix For: Invalid
>
>         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.15#6346)