You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@ode.apache.org by Philippe Allart <pa...@cudl-lille.fr> on 2008/09/02 15:10:56 UTC

Problem with Assign or Invoke

Hi,

I'm still with my experience of integration of PHP and ODE, and I'm 
closed to complete.

I can send with PHP a one-way request to ODE with some callback 
information. ODE can recognize the EPR and the sessionId.

Then, after some (successful) assign, ODE send a one-way request to 
another PHP script, which can read the message and send it by mail to 
me. This script take into acount the callback information sent by ODE 
(<callback><Adresse>...</Adress><session>...<session></callback).

Then, by clicking on a link in the message I received, I lauch another 
PHP script which picks up the callback received from ODE and send back a 
request to the process.

ODE receives the request, makes an implicite correlation and wakes up 
the right instance. I can see my sessionID in the log.

Then it has to do  an Assign to initialize the response toward  the 
initial "client", which I implemented once again as a PHP WS.

The endpoint used by ODE is correct.

But at this point, ODE falls in error. You'll find below a part of the log.

It seems that the error occurs in the function "InvokePartner"  which, 
according to svn, has been replaced by the functions 
"InvokeReliablePartner" and "InvokeUnreliablePartner" one year ago, but 
may be that does'nt matter.

The exception is "java.lang.NullPointerException", thus I suspect 
something is wrong in the preceding Assign. I've learnt that this kind 
of step is a little bit sensible.

While ODE should call the PHP WS, nothing appears in the access.log of 
http. Thus the error occurs before the invocation.

Here's the log:

---------------------------------------------------------------------------------------------------------
DEBUG - GeronimoLog.debug(66) | >> handleWorkEvent(jobData={final=true, 
mexid=hqejbhcnphr3k60kw2ielr, 
pid={http://sample.bpel.org/bpel/sample}ValidationProcess-76, retry=3, 
type=INVOKE_INTERNAL})
DEBUG - GeronimoLog.debug(66) | InvokeInternal event for mexid 
hqejbhcnphr3k60kw2ielr
DEBUG - GeronimoLog.debug(66) | GET MEX property 
org.apache.ode.bpel.myRoleSessionId = hqejbhcnphr3k60kw2ieln
DEBUG - GeronimoLog.debug(66) | GET MEX property 
org.apache.ode.bpel.myRoleSessionId = hqejbhcnphr3k60kw2ieln
DEBUG - GeronimoLog.debug(66) | GET MEX property 
org.apache.ode.bpel.partnerRoleSessionId = null
DEBUG - GeronimoLog.debug(66) | INPUTMSG: 26.callback: MSG RCVD 
keys=[{CorrelationKey setId=-1, values=[hqejbhcnphr3k60kw2ieln]}] 
mySessionId=hqejbhcnphr3k60kw2ieln partnerSessionId=null
DEBUG - GeronimoLog.debug(66) | INPUTMSG: 26.callback: ckey 
{CorrelationKey setId=-1, values=[hqejbhcnphr3k60kw2ieln]} route is to 
org.apache.ode.dao.jpa.MessageRouteDAOImpl@41cb3
DEBUG - GeronimoLog.debug(66) | INPUTMSG: 26.callback: ROUTING to 
instance 10962
DEBUG - GeronimoLog.debug(66) | BpelRuntimeContextImpl created for 
instance 10962. INDEXED STATE={{OScope 
'__PROCESS_SCOPE:ValidationProcess' id=3}::0=[ACTIVE(...)], 
OPickReceive#42-ReceptionChoix::13=[ACTIVITYGUARD(...)], 
OSequence#27-Notification::2=[SEQUENCE(self=(OSequence#27-Notification,TerminationChannel#3,ParentScopeChannel#5), 
linkframe=org.apache.ode.bpel.runtime.LinkFrame@324438, 
remaining=[OPickReceive#42-ReceptionChoix, {OAssign : LectureReponse, 
joinCondition=null}, {OScope 'CompteRendu' id=55}])], 
OPickReceive#42-ReceptionChoix::14=[PICK(...)], {OScope 
'__PROCESS_SCOPE:ValidationProcess' id=3}::0=[SCOPE(...)], 
OSequence#27-Notification::1=[ACTIVITYGUARD(...)]}
DEBUG - GeronimoLog.debug(66) | Resolving endpoint reference <?xml 
version="1.0" encoding="UTF-8"?>
<EndpointReference xmlns="http://www.w3.org/2005/08/addressing"><session 
xmlns="http://www.intalio.com/type/session">48bd271f1a2bb</session><Address>http://arrigo-dev/Notification/onResult.php</Address></EndpointReference>
DEBUG - GeronimoLog.debug(66) | INVOKING PARTNER: 
partnerLink={PartnerLinkInstance 
partnerLinkDecl=OPartnerLink#25,scopeInstanceId=11972}, op=onResult 
channel=null)
DEBUG - GeronimoLog.debug(66) | INVOKE PARTNER (SEP): 
sessionId=hqejbhcnphr3k60kw2ielm partnerSessionId=48bd271f1a2bb
DEBUG - GeronimoLog.debug(66) | Invoking a partner operation: onResult
ERROR - GeronimoLog.error(108) | Method "run" in class 
"org.apache.ode.bpel.runtime.INVOKE" threw an unexpected exception.
java.lang.NullPointerException
    at 
org.apache.ode.axis2.MessageExchangeContextImpl.invokePartner(MessageExchangeContextImpl.java:51)
    at 
org.apache.ode.bpel.engine.BpelRuntimeContextImpl.invoke(BpelRuntimeContextImpl.java:775)
----------------------------------------------------------------------------------

Here's my BPEL process:

 <?xml version="1.0" encoding="UTF-8"?>
<bpws:process exitOnStandardFault="yes" name="ValidationProcess"
    suppressJoinFailure="no"
    targetNamespace="http://sample.bpel.org/bpel/sample"
    xmlns:bpws="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
    xmlns:ns="http://www.example.org/client/"
    xmlns:ns0="http://bpel.lmcu.fr/xsd/Validation"
    xmlns:ns1="http://bpel.lmcu.fr/Notification/"
    xmlns:ns2="http://bpel.lmcu.fr/tests/Validation" 
xmlns:tns="http://sample.bpel.org/bpel/sample">
    <bpws:import importType="http://schemas.xmlsoap.org/wsdl/"
        location="ValidationProcess.wsdl" 
namespace="http://sample.bpel.org/bpel/sample"/>
    <bpws:import importType="http://schemas.xmlsoap.org/wsdl/"
        location="Notification.wsdl" 
namespace="http://bpel.lmcu.fr/Notification/"/>
    <bpws:import importType="http://schemas.xmlsoap.org/wsdl/"
        location="client.wsdl" namespace="http://www.example.org/client/"/>
    <bpws:import importType="http://www.w3.org/2001/XMLSchema"
        location="Notification.xsd" 
namespace="http://bpel.lmcu.fr/xsd/Validation/request"/>
    <bpws:partnerLinks>
        <bpws:partnerLink initializePartnerRole="no"
            myRole="ValidationProcessProvider" name="client"
            partnerLinkType="tns:ValidationProcessPLT" 
partnerRole="ValidationProcessRequester"/>
        <bpws:partnerLink initializePartnerRole="yes"
            myRole="NotifierRole" name="Notification"
            partnerLinkType="tns:NotificationPLT" 
partnerRole="NotifiedRole"/>
    </bpws:partnerLinks>
    <bpws:variables>
        <bpws:variable messageType="tns:ValidationProcessRequestMessage" 
name="input"/>
        <bpws:variable messageType="ns:onResultRequest" name="output"/>
        <bpws:variable messageType="ns1:transmitRequest" name="Message"/>
        <bpws:variable messageType="ns1:transmitResponse" name="Response1"/>
        <bpws:variable messageType="ns1:callbackRequest" name="choice"/>
    </bpws:variables>
    <bpws:correlationSets>
        <bpws:correlationSet name="CorrelationSet"/>
    </bpws:correlationSets>
    <bpws:sequence name="Notification">
        <bpws:receive createInstance="yes" name="DemandeNotification"
            operation="initiate" partnerLink="client"
            portType="tns:ValidationProcess" variable="input"/>
        <bpws:assign name="Initialisations" validate="no">
            <bpws:copy keepSrcElementName="no">
                <bpws:from part="payload" variable="input"/>
                <bpws:to part="requete" variable="Message"/>
            </bpws:copy>
        </bpws:assign>
        <bpws:invoke inputVariable="Message" name="EnvoiMessage"
            operation="transmit" outputVariable="Response1"
            partnerLink="Notification" portType="ns1:NotifiedPT"/>
        <bpws:receive name="ReceptionChoix" operation="callback"
            partnerLink="Notification" portType="ns1:NotifierPT" 
variable="choice"/>
        <bpws:assign name="LectureReponse" validate="no">
            <bpws:copy>
                <bpws:from>
                    <bpws:literal>
                        <rep:onResultRequest 
xmlns:rep="http://www.example.org/client/">
                            <rep:result/>
                        </rep:onResultRequest>
                    </bpws:literal>
                </bpws:from>
                <bpws:to part="parameters" variable="output"/>
            </bpws:copy>
            <bpws:copy keepSrcElementName="no">
                <bpws:from part="response" variable="choice">
                    <bpws:query 
queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"><![CDATA[/response]]></bpws:query>
                </bpws:from>
                <bpws:to part="parameters" variable="output">
                    <bpws:query 
queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"><![CDATA[/ns:result]]></bpws:query>
                </bpws:to>
            </bpws:copy>
        </bpws:assign>
        <bpws:invoke inputVariable="output" name="CompteRendu"
            operation="onResult" partnerLink="client" portType="ns:client"/>
    </bpws:sequence>
</bpws:process>

---------------------------------------------------------------------------------------------
the client.wsdl:

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
xmlns:tns="http://www.example.org/client/" 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="client" 
targetNamespace="http://www.example.org/client/">
<wsdl:types>
<xsd:schema targetNamespace="http://www.example.org/client/">
<xsd:element name="onResultRequest" 
type="tns:onResultRequestType"></xsd:element>

    <xsd:complexType name="onResultRequestType">
        <xsd:sequence>
            <xsd:element name="result" type="xsd:string"></xsd:element>
        </xsd:sequence>
    </xsd:complexType>
</xsd:schema>
</wsdl:types>
<wsdl:message name="onResultRequest">
<wsdl:part element="tns:onResultRequest" name="parameters"/>
</wsdl:message>
<wsdl:portType name="client">
<wsdl:operation name="onResult">
<wsdl:input message="tns:onResultRequest"/>
</wsdl:operation>
</wsdl:portType>
    <wsdl:binding name="clientSOAP" type="tns:client">
        <soap:binding style="document"
            transport="http://schemas.xmlsoap.org/soap/http" />
        <wsdl:operation name="onResult">
            <soap:operation
                soapAction="http://www.example.org/client/onResult" />
            <wsdl:input>
                <soap:body use="literal" />
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="clientWS">
<wsdl:port binding="tns:clientSOAP" name="clientPort">
            <soap:address 
location="http://arrigo-dev/Notification/onResult.php"/>
        </wsdl:port>
</wsdl:service>
</wsdl:definitions>
-----------------------------------------------------------------------------------------

Thanks in advance for your responses,

regards,

Ph.

--





Re: Problem with Assign or Invoke

Posted by Philippe Allart <pa...@cudl-lille.fr>.
Matthieu Riou a écrit :
>
>> It seems that the error occurs in the function "InvokePartner"  which,
>> according to svn, has been replaced by the functions "InvokeReliablePartner"
>> and "InvokeUnreliablePartner" one year ago, but may be that does'nt matter.
>>
>>     
>
> Which version of ODE are you using? If you're using a release the code is
> probably closer to our 1.X branch (the trunk is still unreleased):
>
> http://svn.apache.org/repos/asf/ode/branches/APACHE_ODE_1.X/
>   
I'm using the version 1.2.
>
>   
>> The exception is "java.lang.NullPointerException", thus I suspect something
>> is wrong in the preceding Assign. I've learnt that this kind of step is a
>> little bit sensible.
>>     
>
>
> Yeah I'm a bit surprised this isn't caught before. From the line numbers (if
> they match) it seems the service hasn't been deployed in the IL. It's
> probably that you're missing an <invoke partnerLink="..."> block in your
> deployment descriptor.
>   
Thank you very much for your help.
It works!

I've effectively forgotten the last <invoke> in deploy.xml.

Now I will make my PHP scripts more generic and play with them and with 
more complex BPEL scripts.

Regards,

Ph.

--




> Matthieu
>
>
>   
>> While ODE should call the PHP WS, nothing appears in the access.log of
>> http. Thus the error occurs before the invocation.
>>
>> Here's the log:
>>
>>
>> ---------------------------------------------------------------------------------------------------------
>> DEBUG - GeronimoLog.debug(66) | >> handleWorkEvent(jobData={final=true,
>> mexid=hqejbhcnphr3k60kw2ielr, pid={
>> http://sample.bpel.org/bpel/sample}ValidationProcess-76<http://sample.bpel.org/bpel/sample%7DValidationProcess-76>,
>> retry=3, type=INVOKE_INTERNAL})
>> DEBUG - GeronimoLog.debug(66) | InvokeInternal event for mexid
>> hqejbhcnphr3k60kw2ielr
>> DEBUG - GeronimoLog.debug(66) | GET MEX property
>> org.apache.ode.bpel.myRoleSessionId = hqejbhcnphr3k60kw2ieln
>> DEBUG - GeronimoLog.debug(66) | GET MEX property
>> org.apache.ode.bpel.myRoleSessionId = hqejbhcnphr3k60kw2ieln
>> DEBUG - GeronimoLog.debug(66) | GET MEX property
>> org.apache.ode.bpel.partnerRoleSessionId = null
>> DEBUG - GeronimoLog.debug(66) | INPUTMSG: 26.callback: MSG RCVD
>> keys=[{CorrelationKey setId=-1, values=[hqejbhcnphr3k60kw2ieln]}]
>> mySessionId=hqejbhcnphr3k60kw2ieln partnerSessionId=null
>> DEBUG - GeronimoLog.debug(66) | INPUTMSG: 26.callback: ckey {CorrelationKey
>> setId=-1, values=[hqejbhcnphr3k60kw2ieln]} route is to
>> org.apache.ode.dao.jpa.MessageRouteDAOImpl@41cb3
>> DEBUG - GeronimoLog.debug(66) | INPUTMSG: 26.callback: ROUTING to instance
>> 10962
>> DEBUG - GeronimoLog.debug(66) | BpelRuntimeContextImpl created for instance
>> 10962. INDEXED STATE={{OScope '__PROCESS_SCOPE:ValidationProcess'
>> id=3}::0=[ACTIVE(...)],
>> OPickReceive#42-ReceptionChoix::13=[ACTIVITYGUARD(...)],
>> OSequence#27-Notification::2=[SEQUENCE(self=(OSequence#27-Notification,TerminationChannel#3,ParentScopeChannel#5),
>> linkframe=org.apache.ode.bpel.runtime.LinkFrame@324438,
>> remaining=[OPickReceive#42-ReceptionChoix, {OAssign : LectureReponse,
>> joinCondition=null}, {OScope 'CompteRendu' id=55}])],
>> OPickReceive#42-ReceptionChoix::14=[PICK(...)], {OScope
>> '__PROCESS_SCOPE:ValidationProcess' id=3}::0=[SCOPE(...)],
>> OSequence#27-Notification::1=[ACTIVITYGUARD(...)]}
>> DEBUG - GeronimoLog.debug(66) | Resolving endpoint reference <?xml
>> version="1.0" encoding="UTF-8"?>
>> <EndpointReference xmlns="http://www.w3.org/2005/08/addressing"><session
>> xmlns="http://www.intalio.com/type/session
>> ">48bd271f1a2bb</session><Address>
>> http://arrigo-dev/Notification/onResult.php</Address></EndpointReference>
>> DEBUG - GeronimoLog.debug(66) | INVOKING PARTNER:
>> partnerLink={PartnerLinkInstance
>> partnerLinkDecl=OPartnerLink#25,scopeInstanceId=11972}, op=onResult
>> channel=null)
>> DEBUG - GeronimoLog.debug(66) | INVOKE PARTNER (SEP):
>> sessionId=hqejbhcnphr3k60kw2ielm partnerSessionId=48bd271f1a2bb
>> DEBUG - GeronimoLog.debug(66) | Invoking a partner operation: onResult
>> ERROR - GeronimoLog.error(108) | Method "run" in class
>> "org.apache.ode.bpel.runtime.INVOKE" threw an unexpected exception.
>> java.lang.NullPointerException
>>   at
>> org.apache.ode.axis2.MessageExchangeContextImpl.invokePartner(MessageExchangeContextImpl.java:51)
>>   at
>> org.apache.ode.bpel.engine.BpelRuntimeContextImpl.invoke(BpelRuntimeContextImpl.java:775)
>>
>> ----------------------------------------------------------------------------------
>>
>> Here's my BPEL process:
>>
>> <?xml version="1.0" encoding="UTF-8"?>
>> <bpws:process exitOnStandardFault="yes" name="ValidationProcess"
>>   suppressJoinFailure="no"
>>   targetNamespace="http://sample.bpel.org/bpel/sample"
>>   xmlns:bpws="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
>>   xmlns:ns="http://www.example.org/client/"
>>   xmlns:ns0="http://bpel.lmcu.fr/xsd/Validation"
>>   xmlns:ns1="http://bpel.lmcu.fr/Notification/"
>>   xmlns:ns2="http://bpel.lmcu.fr/tests/Validation" xmlns:tns="
>> http://sample.bpel.org/bpel/sample">
>>   <bpws:import importType="http://schemas.xmlsoap.org/wsdl/"
>>       location="ValidationProcess.wsdl" namespace="
>> http://sample.bpel.org/bpel/sample"/>
>>   <bpws:import importType="http://schemas.xmlsoap.org/wsdl/"
>>       location="Notification.wsdl" namespace="
>> http://bpel.lmcu.fr/Notification/"/>
>>   <bpws:import importType="http://schemas.xmlsoap.org/wsdl/"
>>       location="client.wsdl" namespace="http://www.example.org/client/"/>
>>   <bpws:import importType="http://www.w3.org/2001/XMLSchema"
>>       location="Notification.xsd" namespace="
>> http://bpel.lmcu.fr/xsd/Validation/request"/>
>>   <bpws:partnerLinks>
>>       <bpws:partnerLink initializePartnerRole="no"
>>           myRole="ValidationProcessProvider" name="client"
>>           partnerLinkType="tns:ValidationProcessPLT"
>> partnerRole="ValidationProcessRequester"/>
>>       <bpws:partnerLink initializePartnerRole="yes"
>>           myRole="NotifierRole" name="Notification"
>>           partnerLinkType="tns:NotificationPLT"
>> partnerRole="NotifiedRole"/>
>>   </bpws:partnerLinks>
>>   <bpws:variables>
>>       <bpws:variable messageType="tns:ValidationProcessRequestMessage"
>> name="input"/>
>>       <bpws:variable messageType="ns:onResultRequest" name="output"/>
>>       <bpws:variable messageType="ns1:transmitRequest" name="Message"/>
>>       <bpws:variable messageType="ns1:transmitResponse" name="Response1"/>
>>       <bpws:variable messageType="ns1:callbackRequest" name="choice"/>
>>   </bpws:variables>
>>   <bpws:correlationSets>
>>       <bpws:correlationSet name="CorrelationSet"/>
>>   </bpws:correlationSets>
>>   <bpws:sequence name="Notification">
>>       <bpws:receive createInstance="yes" name="DemandeNotification"
>>           operation="initiate" partnerLink="client"
>>           portType="tns:ValidationProcess" variable="input"/>
>>       <bpws:assign name="Initialisations" validate="no">
>>           <bpws:copy keepSrcElementName="no">
>>               <bpws:from part="payload" variable="input"/>
>>               <bpws:to part="requete" variable="Message"/>
>>           </bpws:copy>
>>       </bpws:assign>
>>       <bpws:invoke inputVariable="Message" name="EnvoiMessage"
>>           operation="transmit" outputVariable="Response1"
>>           partnerLink="Notification" portType="ns1:NotifiedPT"/>
>>       <bpws:receive name="ReceptionChoix" operation="callback"
>>           partnerLink="Notification" portType="ns1:NotifierPT"
>> variable="choice"/>
>>       <bpws:assign name="LectureReponse" validate="no">
>>           <bpws:copy>
>>               <bpws:from>
>>                   <bpws:literal>
>>                       <rep:onResultRequest xmlns:rep="
>> http://www.example.org/client/">
>>                           <rep:result/>
>>                       </rep:onResultRequest>
>>                   </bpws:literal>
>>               </bpws:from>
>>               <bpws:to part="parameters" variable="output"/>
>>           </bpws:copy>
>>           <bpws:copy keepSrcElementName="no">
>>               <bpws:from part="response" variable="choice">
>>                   <bpws:query
>> queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"><![CDATA[/response]]></bpws:query>
>>               </bpws:from>
>>               <bpws:to part="parameters" variable="output">
>>                   <bpws:query
>> queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"><![CDATA[/ns:result]]></bpws:query>
>>               </bpws:to>
>>           </bpws:copy>
>>       </bpws:assign>
>>       <bpws:invoke inputVariable="output" name="CompteRendu"
>>           operation="onResult" partnerLink="client" portType="ns:client"/>
>>   </bpws:sequence>
>> </bpws:process>
>>
>>
>> ---------------------------------------------------------------------------------------------
>> the client.wsdl:
>>
>> <?xml version="1.0" encoding="UTF-8"?>
>> <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
>> xmlns:tns="http://www.example.org/client/" xmlns:wsdl="
>> http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="
>> http://www.w3.org/2001/XMLSchema" name="client" targetNamespace="
>> http://www.example.org/client/">
>> <wsdl:types>
>> <xsd:schema targetNamespace="http://www.example.org/client/">
>> <xsd:element name="onResultRequest"
>> type="tns:onResultRequestType"></xsd:element>
>>
>>   <xsd:complexType name="onResultRequestType">
>>       <xsd:sequence>
>>           <xsd:element name="result" type="xsd:string"></xsd:element>
>>       </xsd:sequence>
>>   </xsd:complexType>
>> </xsd:schema>
>> </wsdl:types>
>> <wsdl:message name="onResultRequest">
>> <wsdl:part element="tns:onResultRequest" name="parameters"/>
>> </wsdl:message>
>> <wsdl:portType name="client">
>> <wsdl:operation name="onResult">
>> <wsdl:input message="tns:onResultRequest"/>
>> </wsdl:operation>
>> </wsdl:portType>
>>   <wsdl:binding name="clientSOAP" type="tns:client">
>>       <soap:binding style="document"
>>           transport="http://schemas.xmlsoap.org/soap/http" />
>>       <wsdl:operation name="onResult">
>>           <soap:operation
>>               soapAction="http://www.example.org/client/onResult" />
>>           <wsdl:input>
>>               <soap:body use="literal" />
>>           </wsdl:input>
>>           <wsdl:output>
>>               <soap:body use="literal" />
>>           </wsdl:output>
>>       </wsdl:operation>
>>   </wsdl:binding>
>>   <wsdl:service name="clientWS">
>> <wsdl:port binding="tns:clientSOAP" name="clientPort">
>>           <soap:address location="
>> http://arrigo-dev/Notification/onResult.php"/>
>>       </wsdl:port>
>> </wsdl:service>
>> </wsdl:definitions>
>>
>> -----------------------------------------------------------------------------------------
>>
>> Thanks in advance for your responses,
>>
>> regards,
>>
>> Ph.
>>
>> --
>>
>>
>>
>>
>>
>>     
>
>   


Re: Problem with Assign or Invoke

Posted by Matthieu Riou <ma...@offthelip.org>.
On Tue, Sep 2, 2008 at 6:10 AM, Philippe Allart <pa...@cudl-lille.fr>wrote:

> Hi,
>
> I'm still with my experience of integration of PHP and ODE, and I'm closed
> to complete.
>
> I can send with PHP a one-way request to ODE with some callback
> information. ODE can recognize the EPR and the sessionId.
>
> Then, after some (successful) assign, ODE send a one-way request to another
> PHP script, which can read the message and send it by mail to me. This
> script take into acount the callback information sent by ODE
> (<callback><Adresse>...</Adress><session>...<session></callback).
>
> Then, by clicking on a link in the message I received, I lauch another PHP
> script which picks up the callback received from ODE and send back a request
> to the process.
>
> ODE receives the request, makes an implicite correlation and wakes up the
> right instance. I can see my sessionID in the log.
>
> Then it has to do  an Assign to initialize the response toward  the initial
> "client", which I implemented once again as a PHP WS.
>
> The endpoint used by ODE is correct.
>
> But at this point, ODE falls in error. You'll find below a part of the log.
>
> It seems that the error occurs in the function "InvokePartner"  which,
> according to svn, has been replaced by the functions "InvokeReliablePartner"
> and "InvokeUnreliablePartner" one year ago, but may be that does'nt matter.
>

Which version of ODE are you using? If you're using a release the code is
probably closer to our 1.X branch (the trunk is still unreleased):

http://svn.apache.org/repos/asf/ode/branches/APACHE_ODE_1.X/


>
> The exception is "java.lang.NullPointerException", thus I suspect something
> is wrong in the preceding Assign. I've learnt that this kind of step is a
> little bit sensible.


Yeah I'm a bit surprised this isn't caught before. From the line numbers (if
they match) it seems the service hasn't been deployed in the IL. It's
probably that you're missing an <invoke partnerLink="..."> block in your
deployment descriptor.

Matthieu


>
>
> While ODE should call the PHP WS, nothing appears in the access.log of
> http. Thus the error occurs before the invocation.
>
> Here's the log:
>
>
> ---------------------------------------------------------------------------------------------------------
> DEBUG - GeronimoLog.debug(66) | >> handleWorkEvent(jobData={final=true,
> mexid=hqejbhcnphr3k60kw2ielr, pid={
> http://sample.bpel.org/bpel/sample}ValidationProcess-76<http://sample.bpel.org/bpel/sample%7DValidationProcess-76>,
> retry=3, type=INVOKE_INTERNAL})
> DEBUG - GeronimoLog.debug(66) | InvokeInternal event for mexid
> hqejbhcnphr3k60kw2ielr
> DEBUG - GeronimoLog.debug(66) | GET MEX property
> org.apache.ode.bpel.myRoleSessionId = hqejbhcnphr3k60kw2ieln
> DEBUG - GeronimoLog.debug(66) | GET MEX property
> org.apache.ode.bpel.myRoleSessionId = hqejbhcnphr3k60kw2ieln
> DEBUG - GeronimoLog.debug(66) | GET MEX property
> org.apache.ode.bpel.partnerRoleSessionId = null
> DEBUG - GeronimoLog.debug(66) | INPUTMSG: 26.callback: MSG RCVD
> keys=[{CorrelationKey setId=-1, values=[hqejbhcnphr3k60kw2ieln]}]
> mySessionId=hqejbhcnphr3k60kw2ieln partnerSessionId=null
> DEBUG - GeronimoLog.debug(66) | INPUTMSG: 26.callback: ckey {CorrelationKey
> setId=-1, values=[hqejbhcnphr3k60kw2ieln]} route is to
> org.apache.ode.dao.jpa.MessageRouteDAOImpl@41cb3
> DEBUG - GeronimoLog.debug(66) | INPUTMSG: 26.callback: ROUTING to instance
> 10962
> DEBUG - GeronimoLog.debug(66) | BpelRuntimeContextImpl created for instance
> 10962. INDEXED STATE={{OScope '__PROCESS_SCOPE:ValidationProcess'
> id=3}::0=[ACTIVE(...)],
> OPickReceive#42-ReceptionChoix::13=[ACTIVITYGUARD(...)],
> OSequence#27-Notification::2=[SEQUENCE(self=(OSequence#27-Notification,TerminationChannel#3,ParentScopeChannel#5),
> linkframe=org.apache.ode.bpel.runtime.LinkFrame@324438,
> remaining=[OPickReceive#42-ReceptionChoix, {OAssign : LectureReponse,
> joinCondition=null}, {OScope 'CompteRendu' id=55}])],
> OPickReceive#42-ReceptionChoix::14=[PICK(...)], {OScope
> '__PROCESS_SCOPE:ValidationProcess' id=3}::0=[SCOPE(...)],
> OSequence#27-Notification::1=[ACTIVITYGUARD(...)]}
> DEBUG - GeronimoLog.debug(66) | Resolving endpoint reference <?xml
> version="1.0" encoding="UTF-8"?>
> <EndpointReference xmlns="http://www.w3.org/2005/08/addressing"><session
> xmlns="http://www.intalio.com/type/session
> ">48bd271f1a2bb</session><Address>
> http://arrigo-dev/Notification/onResult.php</Address></EndpointReference>
> DEBUG - GeronimoLog.debug(66) | INVOKING PARTNER:
> partnerLink={PartnerLinkInstance
> partnerLinkDecl=OPartnerLink#25,scopeInstanceId=11972}, op=onResult
> channel=null)
> DEBUG - GeronimoLog.debug(66) | INVOKE PARTNER (SEP):
> sessionId=hqejbhcnphr3k60kw2ielm partnerSessionId=48bd271f1a2bb
> DEBUG - GeronimoLog.debug(66) | Invoking a partner operation: onResult
> ERROR - GeronimoLog.error(108) | Method "run" in class
> "org.apache.ode.bpel.runtime.INVOKE" threw an unexpected exception.
> java.lang.NullPointerException
>   at
> org.apache.ode.axis2.MessageExchangeContextImpl.invokePartner(MessageExchangeContextImpl.java:51)
>   at
> org.apache.ode.bpel.engine.BpelRuntimeContextImpl.invoke(BpelRuntimeContextImpl.java:775)
>
> ----------------------------------------------------------------------------------
>
> Here's my BPEL process:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <bpws:process exitOnStandardFault="yes" name="ValidationProcess"
>   suppressJoinFailure="no"
>   targetNamespace="http://sample.bpel.org/bpel/sample"
>   xmlns:bpws="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
>   xmlns:ns="http://www.example.org/client/"
>   xmlns:ns0="http://bpel.lmcu.fr/xsd/Validation"
>   xmlns:ns1="http://bpel.lmcu.fr/Notification/"
>   xmlns:ns2="http://bpel.lmcu.fr/tests/Validation" xmlns:tns="
> http://sample.bpel.org/bpel/sample">
>   <bpws:import importType="http://schemas.xmlsoap.org/wsdl/"
>       location="ValidationProcess.wsdl" namespace="
> http://sample.bpel.org/bpel/sample"/>
>   <bpws:import importType="http://schemas.xmlsoap.org/wsdl/"
>       location="Notification.wsdl" namespace="
> http://bpel.lmcu.fr/Notification/"/>
>   <bpws:import importType="http://schemas.xmlsoap.org/wsdl/"
>       location="client.wsdl" namespace="http://www.example.org/client/"/>
>   <bpws:import importType="http://www.w3.org/2001/XMLSchema"
>       location="Notification.xsd" namespace="
> http://bpel.lmcu.fr/xsd/Validation/request"/>
>   <bpws:partnerLinks>
>       <bpws:partnerLink initializePartnerRole="no"
>           myRole="ValidationProcessProvider" name="client"
>           partnerLinkType="tns:ValidationProcessPLT"
> partnerRole="ValidationProcessRequester"/>
>       <bpws:partnerLink initializePartnerRole="yes"
>           myRole="NotifierRole" name="Notification"
>           partnerLinkType="tns:NotificationPLT"
> partnerRole="NotifiedRole"/>
>   </bpws:partnerLinks>
>   <bpws:variables>
>       <bpws:variable messageType="tns:ValidationProcessRequestMessage"
> name="input"/>
>       <bpws:variable messageType="ns:onResultRequest" name="output"/>
>       <bpws:variable messageType="ns1:transmitRequest" name="Message"/>
>       <bpws:variable messageType="ns1:transmitResponse" name="Response1"/>
>       <bpws:variable messageType="ns1:callbackRequest" name="choice"/>
>   </bpws:variables>
>   <bpws:correlationSets>
>       <bpws:correlationSet name="CorrelationSet"/>
>   </bpws:correlationSets>
>   <bpws:sequence name="Notification">
>       <bpws:receive createInstance="yes" name="DemandeNotification"
>           operation="initiate" partnerLink="client"
>           portType="tns:ValidationProcess" variable="input"/>
>       <bpws:assign name="Initialisations" validate="no">
>           <bpws:copy keepSrcElementName="no">
>               <bpws:from part="payload" variable="input"/>
>               <bpws:to part="requete" variable="Message"/>
>           </bpws:copy>
>       </bpws:assign>
>       <bpws:invoke inputVariable="Message" name="EnvoiMessage"
>           operation="transmit" outputVariable="Response1"
>           partnerLink="Notification" portType="ns1:NotifiedPT"/>
>       <bpws:receive name="ReceptionChoix" operation="callback"
>           partnerLink="Notification" portType="ns1:NotifierPT"
> variable="choice"/>
>       <bpws:assign name="LectureReponse" validate="no">
>           <bpws:copy>
>               <bpws:from>
>                   <bpws:literal>
>                       <rep:onResultRequest xmlns:rep="
> http://www.example.org/client/">
>                           <rep:result/>
>                       </rep:onResultRequest>
>                   </bpws:literal>
>               </bpws:from>
>               <bpws:to part="parameters" variable="output"/>
>           </bpws:copy>
>           <bpws:copy keepSrcElementName="no">
>               <bpws:from part="response" variable="choice">
>                   <bpws:query
> queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"><![CDATA[/response]]></bpws:query>
>               </bpws:from>
>               <bpws:to part="parameters" variable="output">
>                   <bpws:query
> queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"><![CDATA[/ns:result]]></bpws:query>
>               </bpws:to>
>           </bpws:copy>
>       </bpws:assign>
>       <bpws:invoke inputVariable="output" name="CompteRendu"
>           operation="onResult" partnerLink="client" portType="ns:client"/>
>   </bpws:sequence>
> </bpws:process>
>
>
> ---------------------------------------------------------------------------------------------
> the client.wsdl:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
> xmlns:tns="http://www.example.org/client/" xmlns:wsdl="
> http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="
> http://www.w3.org/2001/XMLSchema" name="client" targetNamespace="
> http://www.example.org/client/">
> <wsdl:types>
> <xsd:schema targetNamespace="http://www.example.org/client/">
> <xsd:element name="onResultRequest"
> type="tns:onResultRequestType"></xsd:element>
>
>   <xsd:complexType name="onResultRequestType">
>       <xsd:sequence>
>           <xsd:element name="result" type="xsd:string"></xsd:element>
>       </xsd:sequence>
>   </xsd:complexType>
> </xsd:schema>
> </wsdl:types>
> <wsdl:message name="onResultRequest">
> <wsdl:part element="tns:onResultRequest" name="parameters"/>
> </wsdl:message>
> <wsdl:portType name="client">
> <wsdl:operation name="onResult">
> <wsdl:input message="tns:onResultRequest"/>
> </wsdl:operation>
> </wsdl:portType>
>   <wsdl:binding name="clientSOAP" type="tns:client">
>       <soap:binding style="document"
>           transport="http://schemas.xmlsoap.org/soap/http" />
>       <wsdl:operation name="onResult">
>           <soap:operation
>               soapAction="http://www.example.org/client/onResult" />
>           <wsdl:input>
>               <soap:body use="literal" />
>           </wsdl:input>
>           <wsdl:output>
>               <soap:body use="literal" />
>           </wsdl:output>
>       </wsdl:operation>
>   </wsdl:binding>
>   <wsdl:service name="clientWS">
> <wsdl:port binding="tns:clientSOAP" name="clientPort">
>           <soap:address location="
> http://arrigo-dev/Notification/onResult.php"/>
>       </wsdl:port>
> </wsdl:service>
> </wsdl:definitions>
>
> -----------------------------------------------------------------------------------------
>
> Thanks in advance for your responses,
>
> regards,
>
> Ph.
>
> --
>
>
>
>
>