Uploaded image for project: 'CXF'
  1. CXF
  2. CXF-6197

Although the Parts classes are same PhaseInterceptorChain not able to recognize it that they are bother same object of same class type

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Incomplete
    • 3.0.1, 2.7.14
    • Invalid
    • None
    • JBPM 6.1.0.Final and CXF and wildfly 8.2.0

    • Needs James Gosling

    Description

      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()); }

      }

                  1. 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]

      Attachments

        1. typeClass-debug-inspect.png
          53 kB
          Sanjay Gautam
        2. object-Item-Inspect.png
          64 kB
          Sanjay Gautam

        Activity

          People

            Unassigned Unassigned
            sanjay05222 Sanjay Gautam
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: