Xpath query help
Hey guys,
I am very new to BPEL and I've been struggling with this problem for 2 days now. I used the example at:
http://www.eclipse.org/bpel/users/howto/ode.php
I managed to get the example working. As an added difficulty, I decided to challenge myself to add a second input. I managed to do that after reading
http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/
I realised that having two elements in the schema is better than having two parts in a message.
Anyway, with the two inputs declared in the wsdl file as:
<element name="HelloWorldRequest">
<complexType>
<sequence>
<element name="input" type="string"/>
<element name="inputB" type="string"/>
</sequence>
</complexType>
</element>I get the following message in the log files when I run the service:
<message><payload><HelloWorldRequest xmlns="http://helloWorld" xmlns:q0="http://helloWorld" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<input>fr asra3</input>
<inputB> asfdasra 2</inputB>
</HelloWorldRequest></payload></message>My difficulty is trying to extract only one of the inputs, either <input> or <inputB> (not both)
I managed to modify the assign function to
<bpel:assign validate="no" name="Assign">
<bpel:copy>
<bpel:from>
bpel:getVariableData('input', 'payload')
</bpel:from>
<bpel:to part="payload" variable="output">
</bpel:to>
</bpel:copy>
</bpel:assign>But the entire payload is being printed, both <input> and <inputB>. I have tried
bpel:getVariableData('input', 'payload','/inputB')And other variations, but it doesn't seem to work. I'd like to output only inputB for now.
Thank you so much for the help.
I will include the wsdl file being used, as below:
<?xml version="1.0"?>
<definitions name="HelloWorld"
targetNamespace="http://helloWorld"
xmlns:tns="http://helloWorld"
xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TYPE DEFINITION - List of types participating in this BPEL process
The BPEL Designer will generate default request and response types
but you can define or import any XML Schema type and use them as part
of the message types.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-->
<types>
<schema attributeFormDefault="unqualified" elementFormDefault="qualified"
targetNamespace="http://helloWorld"
xmlns="http://www.w3.org/2001/XMLSchema">
<element name="HelloWorldRequest">
<complexType>
<sequence>
<element name="input" type="string"/>
<element name="inputB" type="string"/>
</sequence>
</complexType>
</element>
<element name="HelloWorldResponse">
<complexType>
<sequence>
<element name="result" type="string"/>
</sequence>
</complexType>
</element>
</schema>
</types>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
MESSAGE TYPE DEFINITION - Definition of the message types used as
part of the port type defintions
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-->
<message name="HelloWorldRequestMessage">
<part name="payload" element="tns:HelloWorldRequest"/>
</message>
<message name="HelloWorldResponseMessage">
<part name="payload" element="tns:HelloWorldResponse"/>
</message>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PORT TYPE DEFINITION - A port type groups a set of operations into
a logical service unit.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-->
<!-- portType implemented by the HelloWorld BPEL process -->
<portType name="HelloWorld">
<operation name="process">
<input message="tns:HelloWorldRequestMessage" />
<output message="tns:HelloWorldResponseMessage"/>
</operation>
</portType>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PARTNER LINK TYPE DEFINITION
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-->
<plnk:partnerLinkType name="HelloWorld">
<plnk:role name="HelloWorldProvider" portType="tns:HelloWorld"/>
</plnk:partnerLinkType>
<binding name="HelloWorldSOAPBinding" type="tns:HelloWorld">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<operation name="process">
<soap:operation soapAction="http://helloWorld/process" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
</operation>
</binding>
<service name="HelloWorldProcessService">
<port name="HelloWorldProcessPort" binding="tns:HelloWorldSOAPBinding">
<soap:address location="http://localhost:8080/ode/processes/HelloWorld" />
</port>
</service>
</definitions>
Yes, For Assign Activity, though you change a single element of the schema. It will display the whole schema in BPEL Flow. In Assign activity you have to assign only inputB variable from left side to output variable in right side.
which version of Oracle BPEL you are using? If you very new to BPEL, I strongly recommend that you study Orderbooking demo which contains step by step information and explains bpel. If you have soa suite installed, you can find lots of samples at <soa-suite_home>/bpel/samples directory. That will you to understand the technology better.
Similar Messages
-
XPath query rewrite and insertChildXML (10g2): Help?
Hi all,
I have a registered schema for a <log> document. The schema defines an element /log/logData and under that there, /log/logData/data having maxOccurs="unbounded". So the form of documents is
<log>
<logData>
<data>a</data>
<data>b</data>
<data>c</data>
</logData>
</log>
In the schema definition I have enabled "storeArrayAsVArray='true'". The <data> elements are stored in a nested table. Every type is stored object-relationally.
To an instance documen, I add <data> elements so:
UPDATE log SET object_value = insertChildXML(object_value, 'log/logData', 'data', '<data>foo</data>') WHERE existsNode ('/log[@uid="foo"]')
The call succeeds but the problem is that I need to make this call thousands of times. Initiallly the call might take 100 ms, but after a few hundred inserts inserting a single element takes over a second, and the time keeps increasing.
I believe at least part of the problem is that XPath query rewrites are not working for this call.
Following Chapter 6 of Oracle XML DB Developer's Guide, to debug the problem I have switched on
ALTER SESSION SET EVENTS '19021 trace name context forever, level 1';
and then every invocation causes:
ORA-19022: XML XPath functions are disabled
indicating that Oracle could not rewrite the query. Then I set
ALTER SESSION SET EVENTS '19027 TRACE NAME CONTEXT FOREVER, LEVEL 8192'
to obtain a trace file. Here is a portion of that trace:
*** 2005-10-30 16:54:44.984
*** ACTION NAME:() 2005-10-30 16:54:44.968
*** MODULE NAME:(SQL*Plus) 2005-10-30 16:54:44.968
*** SERVICE NAME:(SYS$USERS) 2005-10-30 16:54:44.968
*** SESSION ID:(137.38364) 2005-10-30 16:54:44.968
NO REWRITE
Reason ==> xseq:not optuop
NO REWRITE
Reason ==> xseq:not optuop
NO REWRITE
Reason ==> not SQLX operand
NO REWRITE
Reason ==> non sqlx expression input
NO REWRITE
Reason ==> non rewritable sqlx input
NO REWRITE
(the rest of the file repeats these lines)
I have no idea how to interpet that! Can anyone out there offer some insight/assistance?
Thanks if you can,
HughBelow is a complete example script. Cannot seem to get rewrite for even this simple case. By that I mean, executing both of the SELECT statements near the end yield the ORA-19022, and that executing the insertChildXML takes progressively longer to execute the more child elements there are.
Any pointers appreciated!
Hugh
set echo on
ALTER SESSION SET EVENTS '19021 trace name context forever, level 1';
ALTER SESSION SET EVENTS '19027 TRACE NAME CONTEXT FOREVER, LEVEL 8192';
exec dbms_xmlschema.deleteSchema('http://hughw.net/foo', dbms_xmlschema.DELETE_CASCADE_FORCE);
begin
dbms_xmlschema.registerSchema('http://hughw.net/foo', XMLType('<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://hughw.net/foo" xmlns="http://hughw.net/foo" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"
xmlns:xdb="http://xmlns.oracle.com/xdb" xdb:storeVarrayAsTable="true">
<xs:element name="root" xdb:defaultTable="ROOT" >
<xs:complexType xdb:SQLType="ROOT_T">
<xs:sequence>
<!-- could use out of line storage -->
<!-- commented out
<xs:element name="child" type="childType" minOccurs="0" maxOccurs="unbounded"
xdb:SQLName="CHILDREN"
xdb:SQLInline="false" xdb:defaultTable="CHILD"
/>
-->
<!-- use nested table -->
<xs:element name="child" type="childType" minOccurs="0" maxOccurs="unbounded"
xdb:SQLName="CHILDREN"
xdb:SQLCollType="CHILD_V"
/>
</xs:sequence>
<xs:attribute name="uid" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:complexType name="childType" xdb:SQLType="CHILD_T">
<xs:simpleContent>
<xs:extension base="xs:string"/>
</xs:simpleContent>
</xs:complexType>
</xs:schema>'));
end;
insert into root values( XMLType('<?xml version="1.0" encoding="UTF-8"?>
<root uid="1" xmlns="http://hughw.net/foo"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://hughw.net/foo http://hughw.net/foo">
<child>a</child>
<child>b</child>
<child>c</child>
</root>'));
CREATE INDEX ROOT_INDEX ON ROOT (extractValue(object_value,'/root/@uid'));
select insertChildXML(object_value, '/root', 'child', '<child>x</child>>') FROM root;
explain plan for select insertChildXML(object_value, '/root', 'child', '<child>x</child>>') FROM root;
SELECT PLAN_TABLE_OUTPUT FROM table(DBMS_XPLAN.display('plan_table', NULL, 'serial'));
select insertChildXML(object_value, '/root', 'child', '<child>x</child>>') FROM root
WHERE existsNode(object_value, '/root[@uid="1"]') = 1;
explain plan for select insertChildXML(object_value, '/root', 'child', '<child>x</child>>') FROM root
WHERE existsNode(object_value, '/root[@uid="1"]') = 1;
SELECT PLAN_TABLE_OUTPUT FROM table(DBMS_XPLAN.display('plan_table', NULL, 'serial')); -
Copying Variables in BPEL using XPath Query
Hi,
I am new to BPEL and i want to know if it is possible to copy data from one variable to another using XPath Query in the <from> <to> tags, when the two variables are of different message types.
I am trying to create a sample BPEL that would receive a String through the receive tag tied to one partner link (WSDl) and then invoke a different webservice using the <invoke> tag tied to another partner link (WSDL) by passing the received variable.
I have pasted the BPEL File and the two WSDl files involved.
My Issue is that when I send a soap request to the BPEL, it is passed as null to the webservice invoked.
Probably because the copy tags don't work.
Please help.
BPEL File
<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->
<process name="HelloWorld2"
targetNamespace="http://ode/bpel/unit-test"
xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
xmlns:tns="http://ode/bpel/unit-test"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:test="http://ode/bpel/unit-test.wsdl"
xmlns:ns0="http://poc.com"
queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"
expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0">
<import location="HelloWorld2.wsdl"
namespace="http://ode/bpel/unit-test.wsdl"
importType="http://schemas.xmlsoap.org/wsdl/" />
<import location="sayHello.wsdl"
namespace="http://poc.com"
importType="http://schemas.xmlsoap.org/wsdl/" />
<partnerLinks>
<partnerLink name="helloPartnerLink"
partnerLinkType="test:HelloPartnerLinkType"
myRole="me" />
<partnerLink name="sayHelloBPELPL"
partnerLinkType="ns0:sayHelloPLT"
partnerRole="you" initializePartnerRole="yes" />
</partnerLinks>
<variables>
<variable name="myVar" messageType="test:HelloMessage"/>
<variable name="tmpVar" messageType="test:HelloMessage"/>
<variable name="inVar" messageType="ns0:sayHelloRequest"/>
<variable name="outVar" messageType="ns0:sayHelloResponse"/>
</variables>
<sequence>
<receive
name="start"
partnerLink="helloPartnerLink"
portType="test:HelloPortType"
operation="hello"
variable="myVar"
createInstance="yes"/>
<assign name="ass1">
<copy>
<from variable = "myVar" part = "TestPart"/>
<to variable = "inVar"
part = "parameters"
query= "/sayHello/ns0:param0" />
</copy>
</assign>
<invoke partnerLink = "sayHelloBPELPL"
portType = "ns0:sayHelloPortType"
inputVariable = "inVar"
operation = "sayHello"
outputVariable = "outVar">
</invoke>
<assign name="ass2">
<copy>
<from variable = "outVar"
part = "parameters"
query= "/sayHelloResponse/ns0:return" />
<to variable = "tmpVar" part="TestPart"/>
</copy>
</assign>
<reply name="end"
partnerLink="helloPartnerLink"
portType="test:HelloPortType"
operation="hello"
variable="tmpVar"/>
</sequence>
</process>
WSDL File1
<?xml version="1.0" encoding="utf-8" ?>
<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->
<wsdl:definitions
targetNamespace="http://ode/bpel/unit-test.wsdl"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="http://ode/bpel/unit-test.wsdl"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype"
xmlns:ns0="http://poc.com">
<wsdl:message name="HelloMessage">
<wsdl:part name="TestPart" type="xsd:string"/>
</wsdl:message>
<wsdl:portType name="HelloPortType">
<wsdl:operation name="hello">
<wsdl:input message="tns:HelloMessage" name="TestIn"/>
<wsdl:output message="tns:HelloMessage" name="TestOut"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="HelloSoapBinding" type="tns:HelloPortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="hello">
<soap:operation soapAction="" style="rpc"/>
<wsdl:input>
<soap:body
namespace="http://ode/bpel/unit-test.wsdl"
use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body
namespace="http://ode/bpel/unit-test.wsdl"
use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="HelloService">
<wsdl:port name="HelloPort" binding="tns:HelloSoapBinding">
<soap:address location="http://localhost:8082/ode/processes/helloWorld"/>
</wsdl:port>
</wsdl:service>
<plnk:partnerLinkType name="HelloPartnerLinkType">
<plnk:role name="me" portType="tns:HelloPortType"/>
<plnk:role name="you" portType="tns:HelloPortType"/>
</plnk:partnerLinkType>
</wsdl:definitions>
WSDL File 2
<?xml version="1.0" encoding="UTF-8" ?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:ns0="http://poc.com"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:ns1="http://org.apache.axis2/xsd"
xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype"
targetNamespace="http://poc.com">
<wsdl:types>
<xs:schema xmlns:ns="http://poc.com" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://poc.com">
<xs:element name="sayHello">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="param0" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="sayHelloResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="return" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</wsdl:types>
<wsdl:message name="sayHelloRequest">
<wsdl:part name="parameters" element="ns0:sayHello" />
</wsdl:message>
<wsdl:message name="sayHelloResponse">
<wsdl:part name="parameters" element="ns0:sayHelloResponse" />
</wsdl:message>
<wsdl:portType name="sayHelloPortType">
<wsdl:operation name="sayHello">
<wsdl:input message="ns0:sayHelloRequest" wsaw:Action="urn:sayHello" />
<wsdl:output message="ns0:sayHelloResponse" wsaw:Action="urn:sayHelloResponse" />
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="sayHelloSOAP11Binding" type="ns0:sayHelloPortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="sayHello">
<soap:operation soapAction="urn:sayHello" style="document"/>
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="sayHello">
<wsdl:port name="sayHelloPort" binding="ns0:sayHelloSOAP11Binding">
<soap:address location="http://localhost:8082/ode/processes/sayHello" />
</wsdl:port>
</wsdl:service>
<plnk:partnerLinkType name="sayHelloPLT">
<plnk:role name="me" portType="ns0:sayHelloPortType"/>
<plnk:role name="you" portType="ns0:sayHelloPortType"/>
</plnk:partnerLinkType>
</wsdl:definitions>Hi,
Yes, it very much is possible.
Xpath query provides a lot many data type conversion functions(string to int, string to date etc), which can be used in copying variables.
thanks
Saurabh -
Retrieve xml attribute value of nth xml node using xpath query
I have an xml with following stucture...
<xml>
<header>
<DocumentReference OrderId="order001">
<DocumentReference OrderId="order002">
<DocumentReference OrderId="order003">
I have to loop through this xml and retrieve the orderId values inside Biztalk orchestration.
In the expression shape, I get the count of 'DocumentReference' nodes using an xpath query and then
Added a loopshape to make sure it loops thru all nodes
Loop condition: n<=nodeCount (where n is an integer variable, n=0 to begin with, incremented by 1 thru each loop, nodeCount is # of DocumentReference nodes)
I try retrieve to the orderId in the following expression shape using the below xpath query
xpathQuery = System.String.Format("//*[local-name()='OrderReference'][{0}]/@orderID)",n);
sOrderId = xpath(MsgSingleInvoice,xpathQuery);
And I get the following exception:
Inner exception: '//*[local-name()='OrderReference'][1]/@orderID)' has an invalid token.
Exception type: XPathException
Appreciate any help! thanks!Thanks for the quick response. I got rid of it.
And I see a different error:
Inner exception: Specified cast is not valid. Exception type: InvalidCastException
Source: Microsoft.XLANGs.Engine
Target Site: System.Object XPathLoad(Microsoft.XLANGs.Core.Part, System.String, System.Type)
Since variable 'n' is of integer type, I suspected it and changed it to n.ToString() and tested again and still see the same error. -
Hi All,
How to use Xpath query . I need a example of Xpath query activity in CPO.XPATH query is a pretty standard XML/web query language. You can review it in general @ http://www.w3schools.com/xpath/xpath_syntax.asp
For CPO examples, I suggest you go check out the design center and/or my blog (which is public to all).
The blog is called Pondering Automation and is @ https://supportforums.cisco.com/community/5811/intelligent-automation
I do a ton of web service work with JSON, XML, Xpath queries , etc.
Also here if you are more specific with your use-case about what you are doing it might be more easy for us to help and everyone to benefit from it. -
XPath query must be an absolute path in BPEL2.0 or only BPEL4WS?
Hi,
The 1st version of the BPEL4WS specifies that "For XPath 1.0, the value of the query attribute MUST be an absolute locationPath (with '/' meaning the root of the document fragment representing the entire part)." (under 14.3)
But in BPEL 2.0 I cannot find this rule. I wonder if it is different in this version. Especially, can people write something like this:
//street[@name='blabla']
in the xPath query of an assign activity? or are there any important restrictions on using xPath query for a copy selection?
Please help
Thank you very muchOk, I've realised i mixed up my partitions. sda1 is with windows, sda3 is the extended one. So i changed rootnoverify(hd0,2) to rootnoverify(hd0,0)
And it shows something entirely different now. For a blink of about 0.5 seconds, it shows:
Booting 'Windows 7'
rootnoverify (hd0,0)
chainloader +1
GRUB loading stage2...
After that 0.5 seconds GRUB goes back to the "system select" screen, the countdown to the default choice goes again, and this whole process loops to eternity...
Problem solved! Frankly speaking, I can't really know why. Everything was solved after I reinstalled both systems. The only difference was that the line makeactive was commented out, not deleted... And I think it is that.
Last edited by matnik (2010-11-20 14:55:04) -
Human Workflow Task XPath query string returns multiple nodes.
I am looking for trouble shooting help for this error. I am no sure if it is a server or jdev issue.
I am running JDev version 10.1.3.3 and console version 10.1.3.1.0 locally.
General information on the BPEL process:
I have a temporary table in Oracle lite that I created items to be review by the user. I created a synchronous BPEL process. The first step in developing this process, I created the straight forward invoke the table to get the records, transform the records with a change the approve flag = "Y", and invoke the table to update the records. Works like a charm. I followed the online tutorial by dropping a human task after the transform, configured the parameters, setup the assignments, and moved the invoke to update table under the approved condition. If the table has only one record, the process runs great but if there are two records I get the following error message.
<selectionFailure xmlns="http://schemas.xmlsoap.org/ws/2003/03/business-process/"><part name="summary"><summary>XPath query string returns multiple nodes.
According to BPEL4WS spec 1.1 section 14.3, The assign activity part and query /ns3:TempItemCollection/ns3:TempItem/ns3:ItemNbr should not return multipe nodes.
Please check the BPEL source at line number "178" and verify the part and xpath query /ns3:TempItemCollection/ns3:TempItem/ns3:ItemNbr.
</summary>
</part></selectionFailure>
=================
The error occurs in the first assign of the Human task after the assign copies the fields for the title. I underlined line number 178.
<correlationSets>
<correlationSet name="WorkflowTaskIdCor"
properties="taskservice:taskId"/>
</correlationSets>
<sequence>
<assign name="HumanTask1_1_AssignTaskAttributes">
<copy>
<from expression="concat(ora:getProcessURL(), string('/HumanTask1/HumanTask1.task'))"/>
<to variable="initiateTaskInput" part="payload"
query="/taskservice:initiateTask/task:task/task:taskDefinitionURI"/>
</copy>
<copy>
<from expression="number(3)"/>
<to variable="initiateTaskInput" part="payload"
query="/taskservice:initiateTask/task:task/task:priority"/>
</copy>
<copy>
<from>
<payload xmlns="http://xmlns.oracle.com/bpel/workflow/task">
<Case xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
<CourtDate xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
<ErrorMessage xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
<ItemName xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
<Payment xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
<Zip xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
<ProcessFlag xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
<LastUpdated xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
<AddedDate xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
<CityAttnyAmount xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
<ApprovalFlag xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
<ProlawKey xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
<ProcessKey xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
</payload>
</from>
<to variable="initiateTaskInput" part="payload"
query="/taskservice:initiateTask/task:task/task:payload"/>
</copy>
<copy>
<from expression="concat(string('Item Fee Approval '), bpws:getVariableData('Invoke_1_Select_RecordsSelect_OutputVariable','TempItemCollection','/ns3:TempItemCollection/ns3:TempItem/ns3:ItemName'))"/>
<to variable="initiateTaskInput" part="payload"
query="/taskservice:initiateTask/task:task/task:title"/>
</copy>
<copy>
<from variable="Invoke_1_Select_RecordsSelect_OutputVariable"
part="TempItemCollection"
query="/ns3:TempItemCollection/ns3:TempItem/ns3:ItemNbr"/>
<to variable="initiateTaskInput" part="payload"
query="/taskservice:initiateTask/task:task/task:payload/task:Item"/>
</copy>
<copy>
Thank you for any help you can give me.Here is how I solved this problem: I was told by the metalink folks that I should use the same verion of SOA console as jdev. So I went back to jdev 10.1.3.1. Rather than reading from the Oracle lite table, I dumped the table into a flat file. I read flat file and populated the workflow. Remember to set the 'messages in batch' flag in the file adapter to 1 and the number of records to skip to zero in the format builder for the flat file. The process now reads each record and creates an instance for that each record. In other words, if I have 8 records in my flat file, I will have 8 instances of the process running on the console. Thanks Jeremy for your help figuring this out.
Edited by: user7725126 on Nov 19, 2009 3:56 PM -
XPath query string returns zero node error
I have created car loan bpel application. One is Citi Loan and another is Star Loan.
I have created just like similar to sample loan demo.
I have entered the SSN, email, carModel, carYear, loanAmount and creditRating value and submitted. It will initiated the following tasks successfully.
StarLoan Instance
CitiLoan Instance
TaskManager Instance
CreditRating Instance
Root appln. instance
I have created one user approval page for Approve/Reject (jsp). Through this page, I have approved the CitiLoan offer. I have faced the following errors.
<output>
<part name="payload" >
<loanOffer>7.4</loanOffer>
</part>
</output>
<loanOffer>7.4</loanOffer>
<selectionFailure>
<part name="summary" >
<summary>XPath query string returns zero node. According to BPEL4WS spec 1.1 section 14.3, The assign activity <to> part query should not return zero node. Please check the BPEL source at line number "90" and verify the <to> part xpath query. </summary>
</part>
</selectionFailure>
Please help me.
Thanks in advance.
Regards,
SaraLet us know if you have customized SOA composite for user creation approval?
-Vamsi. -
XPath query with out namespace is possible ?
Hi,
our system reciving xml data using the datatype xsd[b] <any/> . am sure the system will receive the data in same format[node hierarchical] but the namespace of the root element may be differ..
i want write xpath which should not be parse based on the namespace of element.
like the method setNameSpaceAware(false) in java;
will it be possible in bpel. if so how ?
i would be appreciate any help.
Thanks,
BogiAhhhh - thank you for the clarification.
Regarding the expansion of variable, is there anything further needed? Reason I ask is, when I use the variable which contains the same string as when I hard code the string in the XPATH query, I do not receive the desired results - I only receive the
'VENDOR_ADVISORY' results. -
Xpath query using ANE with AIR3.9 for iOS app
we are building an app for iOS using AIR 3.9 where we have to load and parse the xml document so that we can read the images path and download the stuff on iOS device. To fix this issue we have found a solution using XCode via ANE where by using XPath Query classes such as "PerformXPathQuery", "PerformXMLXPathQuery", "xmlReadMemory" etc. The code is running well when build on simulator itself on mac machine. But when we are packaging the ANE with AIR 3.9, it gives us the error which says that:-
Error occurred while packaging the application:
Undefined symbols for architecture armv7:
"_xmlReadMemory", referenced from:
_PerformXMLXPathQuery in libnet.example.download.a(ExampleLib.o)
ld: symbol(s) not found for architecture armv7
Compilation failed while executing : ld64
I have tried linking binary with libraries like "libxml2.dylib", "libxml2.2.dylib" and libz.dylib + added the libXML header files to the header search path in the build properties, but got no help.
our AIR 3.9 platform xml looks like:-
<platform xmlns="http://ns.adobe.com/air/extension/3.9">
<sdkVersion>4.0.0</sdkVersion>
<linkerOptions>
<option>-ios_version_min 4.2</option>
<option>-framework UIKit</option>
<option>-framework Foundation</option>
<option>-framework CoreText</option>
</linkerOptions>
</platform>
can anyone suggest where we are going wrong!
thanks in advanceFound the solution, i was missing the framework related to xPath library in platform.xml
follow the instuctions from the below link:-
http://forums.adobe.com/thread/1037904
thanks adobe team -
Query Help:
http://forum.java.sun.com/thread.jsp?forum=45&thread=471180&tstart=15&trange=15
It seems I have confused enough people with my improper presentation of query. Sorry guys. I will restate my question with different table names.
The above was my previous posting, which was not clear..so Iam restating my problem as follows....
I have the following tables
Customer(custID, Name, Address)
Order(custID, OrderID, orderDate)
CreditCard(custID, creditCard#, creditCardType)
Now if I have 3 records in Order with custID 100 and 2 records in CreditCard as
Order:
100,A001,11/22/03
100,A002,11/24/03
100,A003,12/02/03
CreditCard:
100,42323232..., VISA
100,5234234...., MASTER
Now how can I get
custID, Name, Address, OrderID, orderDate, creditCard#, creditCarType
data in minimum no. of records....
I think I have made my query clear..
now please help me guys...
thanks so much for your help.You are right.
But frankly the actual tables on my database are not customer,orders and creditcards..but I just tried to reproduce the problem with these tables, please ignore that user needs a refund etc situtaion. If the tables were actually order,creditcards etc..it would have been a problem to be considered.
Can you please help me with the query
if I have m rows in Order and n rows in CreditCard. I will get m*n records, I looking for max(m,n).
With the following fields in my query result,
custID, Name, Address, OrderID, orderDate, creditCard#, creditCarType
from Customer, Order, CreditCard tables
Thanks so much for your htlp -
SQL Query Help - Is this possible or impossible????
Hi guys,
I need help with an SQL query that I'm trying to develop. It's very easy to explain but when trying to implement it, I'm struggling to achieve the results that I want.....
For example,
I have 2 tables
The first table is:
1) COMPANY create table company (manufacturer varchar2(25),
date_established date,
location varchar2(25) );My sample test date is:
insert into company values ('Ford', 1902, 'USA');
insert into company values ('BMW', 1910, 'Germany');
insert into company values ('Tata', 1922, 'India');The second table is:
2) MODELS create table models (manufacturer varchar(25),
model varchar2(25),
price number(10),
year date,
current_production_status varchar2(1) ) ;My sample test data is:
insert into models values ('Ford', 'Mondeo', 10000, 2010, 0);
insert into models values ('Ford', 'Galaxy', 12000, 2008, 0);
insert into models values ('Ford', 'Escort', 10000, 1992, 1);
insert into models values ('BMW', '318', 17500, 2010, 0);
insert into models values ('BMW', '535d', 32000, 2006, 0);
insert into models values ('BMW', 'Z4', 10000, 1992, 0);
insert into models values ('Tata', 'Safari', 4000, 1999, 0);
insert into models values ('Tata', 'Sumo', 5500, 1996, 1);
insert into models values ('Tata', 'Maruti', 3500, 1998, 0);And this is my query:
SELECT
com.manufacturer,
com.date_established,
com.location,
DECODE(nvl(mod.current_production_status, '0'), '0', '-', mod.model),
DECODE(nvl(mod.current_production_status, '0'), '0', '-', mod.price),
DECODE(nvl(mod.current_production_status, '0'), '0', '-', mod.year),
mod.current_production_status
FROM
company com,
models mod
WHERE
mod.manufacturer = com.manufacturer
and com.manufacturer IN ('Ford', 'BMW', 'Tata')
and mod.current_production_status IN (1,0)
ORDER BY
mod.current_production_status DESCWhat I want the query to output is this:
com.manufacturer com.date_established com.location mod.model mod.price mod.year mod.current_production_status
Ford 1902 USA Escort 10000 1992 1
BMW 1910 Germany - - - 0
Tata 1922 India Sumo 5500 1998 1If current_production_status is 1 it means this particular model has been discontinued
If current_production_status is 0 it means the manufacturer does not have any discontinued models and all are in procuction.
The rule is only one record per manufacturer is allowed to have a current_production_status of 1 (so only one model from the selection the manufactuer offers is allowed to be discontinued).
So the query should output the one row where current_production_status is 1 for each manufacturer.
If for a given manufacturer there are no discontinued models and all have a current_production_status of 0 then ouput a SINGLE row that only includes the data from the COMPANY table (as above). The rest of the columns from the MODELS table should be populated with a '-' (hyphen).
My query as it is above will output all the records where current status is 1 or 0 like this
com.manufacturer com.date_established com.location mod.model mod.price mod.year mod.current_production_status
Ford 1902 USA Escort 10000 1992 1
Tata 1922 India Sumo 5500 1998 1
Ford 1902 USA - - - 0
Ford 1902 USA - - - 0
BMW 1910 Germany - - - 0
BMW 1910 Germany - - - 0
BMW 1910 Germany - - - 0
Tata 1922 India - - - 0
Tata 1922 India - - - 0However this is not what I want.
Any ideas how I can achieve the result I need?
Thanks!
P.S. Database version is '10.2.0.1.0'Hi Vishnu,
Karthiks query helped...
But this is the problem I am facing...
SELECT
com.manufacturer,
com.date_established,
com.location,
DECODE(nvl(mod.current_production_status, '0'), '0', '-', mod.model),
DECODE(nvl(mod.current_production_status, '0'), '0', '-', mod.price),
DECODE(nvl(mod.current_production_status, '0'), '0', '-', mod.year),
mod.current_production_status
FROM
company com,
models mod
WHERE
mod.manufacturer = com.manufacturer
and com.manufacturer = 'Ford'
and mod.current_production_status IN (1,0)
ORDER BY
mod.current_production_status DESCThe value of:
and com.manufacturer = 'Ford'will be dependent on front end user input....
When I run the query above I get all the rows where current_production_status is either 1 or 0.
I only require the rows where current_production_status is 1.
So if I amend it to look like this:
and mod.current_production_status = 1This works....
BUT if a user now passes in more than one manufacturer EG:
and com.manufacturer IN ('Ford', 'BMW')The query will only return the one row for Ford where current_production_status is 1. However because BMW has no models where current_production_status is 1 (all 3 are 0), I still want this to be output - as one row....
So like this:
com.manufacturer com.date_established com.location mod.model mod.price mod.year mod.current_production_status
Ford 1902 USA Escort 10000 1992 1
BMW 1910 Germany - - - 0So (hopefully you understand), I want both cases to be catered for.....whether a user enters one manufacturer or more than one...
Thanks you so much!
This is really driving me insane :-( -
Variable Picker generates invalid XPath query
This one seems to be a bug:
When declaring a variable of type "element" (not "messageType") and accessing the variable with the Variable Picker from within the assign assistant, i.e. the following line ist generated:
bpws:getVariableData("testVar","","/tns:TaskMgrTestCaseRequest/tns:input")
The BPEL process can be validated and deployed without an error.
At runtime the following exception is generated:
XPath expression failed to execute.
Error while processing xpath expression, the expression is "bpws:getVariableData("testVar", "", "/tns:TaskMgrTestCaseRequest/tns:input")", the reason is XPath expression failed to execute.
Error while processing xpath expression, the expression is "", the reason is Unexpected ''.
Please verify the xpath query.
Please verify the xpath query.
When working with variables of type messageType, there is no problem. (So I declared a messageType to each element type ...)
WolfgangThanks for the heads up. We will try to kill this bug in the 0.97 release. -Edwin
-
XPath Query Language Reference
Aside from the three little examples given in the 11g Guide and the B2B Tech Note #011, is there a reference available for the XPath Query Language used by B2B? Is is possible to use complex XPath queries in the B2B Doc Definitions?
I'm mainly just looking for the full capabilities of the queries.
Specifically, at the moment, I'm looking for a way to match the value of a node to a group of values (like a sql 'in') as well as check the existence and value of other nodes within the same query.
Do the documents I find for 'Preference XPath' pertain here? -
Xpath query on initiateTaskResponse variable fails
I have a small BPEL process which has a human task , in that when I try to access taskid from initiateTaskResponse message, it throws xpath query is invalid error.
ThanksThanks for your Reply,
I can able to browse the variable in JDeveloper at design time. When I try to deploy the process, the server throws error on that assign activity(Selection Failure). So I have changed the assign activity to JavaEmbeeding, but now it throws 'Selection Failure' error at runtime.
I can able to use anyother variables in assign activity.
Thanks in advance,
Murugavel Mahadevan
Maybe you are looking for
-
I want to print several attahments at once without opening them one at a time.
What I am trying to accomplish is this, I'm trying to at one time print several attachments at one time without opening them one at a time. They are receipt from our supplier so we receive an average of twenty a day it will be so time consuming to ha
-
I have unistalled it completly, manually deleted everything that has to do with Apple, and I installed Itunes countless times. Frustating at its best how do I fix this problem?
-
Table Pagination for Dynamic Table UI
Hi Everyone, I have add pagination to webdynpro java table UI that displays over 10k records. I went through article "Web Dynpro Java Table Paging Unleashed: Optimizing Heavy Table Performance" by Bertram Ganz - http://www.sdn.sap.com/irj/scn/go/port
-
I have mail Ver. 7 and I am having trouble syncing my work gmail account
Hi, From the time I have upgraded to Mavericks, I am having trouble syncing my gmail emails. After the mail update my personal mail accounts from gmail are working fine but I am still having trouble with my office gmail account. I am receving new ema
-
Anybody else having problem with bluetooth connection in vehicle
I have had the iPhone 4s for about 10 days now, and my problem is lag time connecting to the Bluetooth in my vehicle. When I make a call from the phone, the Bluetooth doesn't connect until the call is picked up on the receiving end. In other words I