Hi all, Currently I am trying to call some methods of BPS-HumanTaskClientAPIAdmin from an IS back end component. To do this I have added "HumanTaskClientAPIAdmin.wsdl", "ws-humanyask-types.xsd" and "xml.xsd" files to currently existing service stub at IS, which is org.wso2.carbon.identity.workflow.mgt.bps.stub [1]. I took the HumanTaskClientAPIAdmin.wsdl from a latest BPS pack and other 2 files from [2]. I newly added following task to the pom.xml of the service stub.
*<java classname="org.apache.axis2.wsdl.WSDL2Java" fork="true"> <arg line="-uri src/main/resources/HumanTaskUploader.wsdl -u -uw -o target/generated-code -p org.wso2.carbon.humantask.stub.upload -ns2p http://services.deployer.humantask.carbon.wso2.org <http://services.deployer.humantask.carbon.wso2.org>=org.wso2.carbon.humantask.stub.upload,http://services.deployer.humantask.carbon.wso2.org/xsd=org.wso2.carbon.humantask.stub.upload.types <http://services.deployer.humantask.carbon.wso2.org/xsd=org.wso2.carbon.humantask.stub.upload.types>"/> <classpath refid="maven.dependency.classpath"/> <classpath refid="maven.compile.classpath"/> <classpath refid="maven.runtime.classpath"/></java>* In my backend component where I need to call the methods of this stub, we already had a dependency to the stub. *<dependency>* * <groupId>org.wso2.carbon.identity</groupId> <artifactId>org.wso2.carbon.identity.workflow.mgt.bps.stub</artifactId></dependency>* Then I added following code to call the service through the stub. *int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();List<BPSProfileDTO> bpsProfiles = bpsProfileDAO.listBPSProfiles(tenantId);HumanTaskClientAPIAdminStub stub = null;TSimpleQueryInput input = new TSimpleQueryInput();TStatus readyState = new TStatus();//TSimpleQueryCategory queryCategory = new TSimpleQueryCategory("ALL_TASKS", true);readyState.setTStatus("READY");input.addStatus(readyState);input.setPageSize(100000);input.setPageNumber(0);input.setSimpleQueryCategory(TSimpleQueryCategory.ALL_TASKS);for (int i = 0; i < bpsProfiles.size(); i++) { String host = bpsProfiles.get(i).getHost(); URL servicesUrl = new URL(new URL(host), "services/HumanTaskClientAPIAdmin"); stub = new HumanTaskClientAPIAdminStub(servicesUrl.toString()); ServiceClient client = stub._getServiceClient(); authenticate(client, bpsProfiles.get(i).getUsername(), bpsProfiles.get(i).getUsername()); TTaskSimpleQueryResultSet results = stub.simpleQuery(input);}* But when I call the stub.simpleQuery() method I am getting an error without any details and when I debugged the code, I found out that it gives a *Method threw 'java.lang.LinkageError' exception. Cannot evaluate org.apache.axiom.soap.impl.llom.soap11.SOAP11BodyImpl.toString()* error at auto generated stub method while creating the SOAP envelope. Following is the auto generated code for above method. *public org.wso2.carbon.identity.workflow.mgt.bps.stub.types.TTaskSimpleQueryResultSet simpleQuery( org.wso2.carbon.identity.workflow.mgt.bps.stub.types.TSimpleQueryInput simpleQueryInput587) throws java.rmi.RemoteException ,org.wso2.carbon.humantask.stub.upload.IllegalStateFault ,org.wso2.carbon.humantask.stub.upload.IllegalArgumentFault{ org.apache.axis2.context.MessageContext _messageContext = null; try{ org.apache.axis2.client.OperationClient _operationClient = _serviceClient.createClient(_operations[22].getName()); _operationClient.getOptions().setAction("http://docs.oasis-open.org/ns/bpel4people/ws-humantask/api/200803/simpleQuery <http://docs.oasis-open.org/ns/bpel4people/ws-humantask/api/200803/simpleQuery>"); _operationClient.getOptions().setExceptionToBeThrownOnSOAPFault(true); addPropertyToOperationClient(_operationClient,org.apache.axis2.description.WSDL2Constants.ATTR_WHTTP_QUERY_PARAMETER_SEPARATOR,"&"); // create a message context _messageContext = new org.apache.axis2.context.MessageContext(); // create SOAP envelope with that payload org.apache.axiom.soap.SOAPEnvelope env = null; org.oasis_open.docs.ns.bpel4people.ws_humantask.api._200803.SimpleQuery dummyWrappedType = null; env = toEnvelope(getFactory(_operationClient.getOptions().getSoapVersionURI()), simpleQueryInput587, dummyWrappedType, optimizeContent(new javax.xml.namespace.QName("http://docs.oasis-open.org/ns/bpel4people/ws-humantask/api/200803 <http://docs.oasis-open.org/ns/bpel4people/ws-humantask/api/200803>", "simpleQuery"))); //adding SOAP soap_headers _serviceClient.addHeadersToEnvelope(env);// set the message context with that soap envelope_messageContext.setEnvelope(env);// add the message contxt to the operation client_operationClient.addMessageContext(_messageContext);//execute the operation client_operationClient.execute(true); org.apache.axis2.context.MessageContext _returnMessageContext = _operationClient.getMessageContext( org.apache.axis2.wsdl.WSDLConstants.MESSAGE_LABEL_IN_VALUE); org.apache.axiom.soap.SOAPEnvelope _returnEnv = _returnMessageContext.getEnvelope(); java.lang.Object object = fromOM( _returnEnv.getBody().getFirstElement() , org.oasis_open.docs.ns.bpel4people.ws_humantask.api._200803.SimpleQueryResponse.class, getEnvelopeNamespaces(_returnEnv)); return getSimpleQueryResponseTaskSimpleQueryResultSet((org.oasis_open.docs.ns.bpel4people.ws_humantask.api._200803.SimpleQueryResponse)object); }catch(org.apache.axis2.AxisFault f){ org.apache.axiom.om.OMElement faultElt = f.getDetail(); if (faultElt!=null){ if (faultExceptionNameMap.containsKey(new org.apache.axis2.client.FaultMapKey(faultElt.getQName(),"simpleQuery"))){ //make the fault by reflection try{ java.lang.String exceptionClassName = (java.lang.String)faultExceptionClassNameMap.get(new org.apache.axis2.client.FaultMapKey(faultElt.getQName(),"simpleQuery")); java.lang.Class exceptionClass = java.lang.Class.forName(exceptionClassName); java.lang.Exception ex = (java.lang.Exception) exceptionClass.newInstance(); //message class java.lang.String messageClassName = (java.lang.String)faultMessageMap.get(new org.apache.axis2.client.FaultMapKey(faultElt.getQName(),"simpleQuery")); java.lang.Class messageClass = java.lang.Class.forName(messageClassName); java.lang.Object messageObject = fromOM(faultElt,messageClass,null); java.lang.reflect.Method m = exceptionClass.getMethod("setFaultMessage", new java.lang.Class[]{messageClass}); m.invoke(ex,new java.lang.Object[]{messageObject}); if (ex instanceof org.wso2.carbon.humantask.stub.upload.IllegalStateFault){ throw (org.wso2.carbon.humantask.stub.upload.IllegalStateFault)ex; } if (ex instanceof org.wso2.carbon.humantask.stub.upload.IllegalArgumentFault){ throw (org.wso2.carbon.humantask.stub.upload.IllegalArgumentFault)ex; } throw new java.rmi.RemoteException(ex.getMessage(), ex); }catch(java.lang.ClassCastException e){ // we cannot intantiate the class - throw the original Axis fault throw f; } catch (java.lang.ClassNotFoundException e) { // we cannot intantiate the class - throw the original Axis fault throw f; }catch (java.lang.NoSuchMethodException e) { // we cannot intantiate the class - throw the original Axis fault throw f; } catch (java.lang.reflect.InvocationTargetException e) { // we cannot intantiate the class - throw the original Axis fault throw f; } catch (java.lang.IllegalAccessException e) { // we cannot intantiate the class - throw the original Axis fault throw f; } catch (java.lang.InstantiationException e) { // we cannot intantiate the class - throw the original Axis fault throw f; } }else{ throw f; } }else{ throw f; } } finally { if (_messageContext.getTransportOut() != null) { _messageContext.getTransportOut().getSender().cleanup(_messageContext); } }}* What is the issue here? Am I missing anything at creating stub? How can I overcome this? Thank You! 1. https://github.com/wso2/carbon-identity/tree/master/service-stubs/identity/org.wso2.carbon.identity.workflow.mgt.bps.stub 2. https://github.com/wso2/carbon-business-process/tree/master/service-stubs/humantask/org.wso2.carbon.humantask.stub/src/main/resources -- *Chamila Dilshan Wijayarathna,* Software Engineer Mobile:(+94)788193620 WSO2 Inc., http://wso2.com/
_______________________________________________ Dev mailing list Dev@wso2.org http://wso2.org/cgi-bin/mailman/listinfo/dev