You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by ka...@apache.org on 2009/02/06 22:52:02 UTC
svn commit: r741748 - in /ode/trunk:
bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/v1/xpath20/
bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/v2/xpath20/
bpel-test/src/test/java/org/apache/ode/test/
bpel-test/src/test/resources/bpe...
Author: karthick
Date: Fri Feb 6 21:52:01 2009
New Revision: 741748
URL: http://svn.apache.org/viewvc?rev=741748&view=rev
Log:
ODE-508 In essence, this is a forward port of ODE-498.
Added:
ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestAssignActivity3/
ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestAssignActivity3/deploy.xml
ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestAssignActivity3/test.bpel
ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestAssignActivity3/test.properties
ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestAssignActivity3/test.wsdl
ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestAssignActivity3/test.xsd
Modified:
ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/v1/xpath20/XPath20ExpressionCompilerImpl.java
ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/v2/xpath20/XPath20ExpressionCompilerImpl.java
ode/trunk/bpel-test/src/test/java/org/apache/ode/test/DataHandling20Test.java
ode/trunk/bpel-test/src/test/java/org/apache/ode/test/StructuredActivities20Test.java
ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestAssignActivity2/TestAssign.bpel
Modified: ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/v1/xpath20/XPath20ExpressionCompilerImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/v1/xpath20/XPath20ExpressionCompilerImpl.java?rev=741748&r1=741747&r2=741748&view=diff
==============================================================================
--- ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/v1/xpath20/XPath20ExpressionCompilerImpl.java (original)
+++ ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/v1/xpath20/XPath20ExpressionCompilerImpl.java Fri Feb 6 21:52:01 2009
@@ -19,7 +19,9 @@
package org.apache.ode.bpel.compiler.v1.xpath20;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import javax.xml.namespace.QName;
@@ -30,6 +32,7 @@
import javax.xml.xpath.XPathFactory;
import javax.xml.xpath.XPathFactoryConfigurationException;
+import net.sf.saxon.om.Name11Checker;
import net.sf.saxon.om.NamespaceConstant;
import org.apache.commons.logging.Log;
@@ -155,6 +158,14 @@
} catch (XPathExpressionException xpee) {
// swallow errors caused by uninitialized variable
}
+ for (String varExpr : extractVariableExprs(xpathStr)) {
+ expr = xpe.compile(varExpr);
+ try {
+ expr.evaluate(node);
+ } catch (XPathExpressionException xpee) {
+ // swallow errors caused by uninitialized variable
+ }
+ }
} catch (XPathFactoryConfigurationException xpfce) {
__log.debug(xpfce);
__log.info("Couldn't validate properly expression " + xpathStr);
@@ -174,4 +185,59 @@
return _properties;
}
+ /**
+ * Returns the list of variable references in the given XPath expression
+ * that may not have been resolved properly, which is the case especially
+ * if the expression contains a function, which short circuited the evaluation.
+ *
+ * @param xpathStr
+ * @return list of variable expressions that may not have been resolved properly
+ */
+ private List<String> extractVariableExprs(String xpathStr) {
+ ArrayList<String> variableExprs = new ArrayList<String>();
+ int firstVariable = xpathStr.indexOf("$"),
+ lastVariable = xpathStr.lastIndexOf("$"),
+ firstFunction = xpathStr.indexOf("(");
+ if ((firstVariable > 0 && // the xpath references a variable
+ firstFunction > 0) || // the xpath contains a function
+ (firstVariable < lastVariable)) { // the xpath references multiple variables
+ // most likely, the variable reference has not been resolved, so make that happen
+ StringBuffer variableExpr = new StringBuffer();
+ boolean quoted = false, doubleQuoted = false, variable = false;
+ Name11Checker nameChecker = Name11Checker.getInstance();
+ for (int index = 0; index < xpathStr.length(); index++) {
+ char ch = xpathStr.charAt(index);
+ if (ch == '\''){
+ quoted = !quoted;
+ }
+ if (ch == '\"') {
+ doubleQuoted = !doubleQuoted;
+ }
+ if (quoted || doubleQuoted){
+ continue;
+ }
+ if (ch == '$') {
+ variable = true;
+ variableExpr.setLength(0);
+ variableExpr.append(ch);
+ } else {
+ if (variable) {
+ variableExpr.append(ch);
+ // in the name is qualified, don't check if its a qname when we're at the ":" character
+ if (ch == ':') {
+ continue;
+ }
+ if (index == xpathStr.length() ||
+ !nameChecker.isQName(variableExpr.substring(1))) {
+ variable = false;
+ variableExpr.setLength(variableExpr.length() - 1);
+ variableExprs.add(variableExpr.toString());
+ }
+ }
+ }
+ }
+ }
+ return variableExprs;
+ }
+
}
Modified: ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/v2/xpath20/XPath20ExpressionCompilerImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/v2/xpath20/XPath20ExpressionCompilerImpl.java?rev=741748&r1=741747&r2=741748&view=diff
==============================================================================
--- ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/v2/xpath20/XPath20ExpressionCompilerImpl.java (original)
+++ ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/v2/xpath20/XPath20ExpressionCompilerImpl.java Fri Feb 6 21:52:01 2009
@@ -19,7 +19,9 @@
package org.apache.ode.bpel.compiler.v2.xpath20;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import javax.xml.namespace.QName;
@@ -30,6 +32,7 @@
import javax.xml.xpath.XPathFactory;
import javax.xml.xpath.XPathFactoryConfigurationException;
+import net.sf.saxon.om.Name11Checker;
import net.sf.saxon.om.NamespaceConstant;
import org.apache.commons.logging.Log;
@@ -155,6 +158,14 @@
} catch (XPathExpressionException xpee) {
// swallow errors caused by uninitialized variable
}
+ for (String varExpr : extractVariableExprs(xpathStr)) {
+ expr = xpe.compile(varExpr);
+ try {
+ expr.evaluate(node);
+ } catch (XPathExpressionException xpee) {
+ // swallow errors caused by uninitialized variable
+ }
+ }
} catch (XPathFactoryConfigurationException xpfce) {
__log.debug(xpfce);
__log.info("Couldn't validate properly expression " + xpathStr);
@@ -174,4 +185,59 @@
return _properties;
}
+ /**
+ * Returns the list of variable references in the given XPath expression
+ * that may not have been resolved properly, which is the case especially
+ * if the expression contains a function, which short circuited the evaluation.
+ *
+ * @param xpathStr
+ * @return list of variable expressions that may not have been resolved properly
+ */
+ private List<String> extractVariableExprs(String xpathStr) {
+ ArrayList<String> variableExprs = new ArrayList<String>();
+ int firstVariable = xpathStr.indexOf("$"),
+ lastVariable = xpathStr.lastIndexOf("$"),
+ firstFunction = xpathStr.indexOf("(");
+ if ((firstVariable > 0 && // the xpath references a variable
+ firstFunction > 0) || // the xpath contains a function
+ (firstVariable < lastVariable)) { // the xpath references multiple variables
+ // most likely, the variable reference has not been resolved, so make that happen
+ StringBuffer variableExpr = new StringBuffer();
+ boolean quoted = false, doubleQuoted = false, variable = false;
+ Name11Checker nameChecker = Name11Checker.getInstance();
+ for (int index = 0; index < xpathStr.length(); index++) {
+ char ch = xpathStr.charAt(index);
+ if (ch == '\''){
+ quoted = !quoted;
+ }
+ if (ch == '\"') {
+ doubleQuoted = !doubleQuoted;
+ }
+ if (quoted || doubleQuoted){
+ continue;
+ }
+ if (ch == '$') {
+ variable = true;
+ variableExpr.setLength(0);
+ variableExpr.append(ch);
+ } else {
+ if (variable) {
+ variableExpr.append(ch);
+ // in the name is qualified, don't check if its a qname when we're at the ":" character
+ if (ch == ':') {
+ continue;
+ }
+ if (index == xpathStr.length() ||
+ !nameChecker.isQName(variableExpr.substring(1))) {
+ variable = false;
+ variableExpr.setLength(variableExpr.length() - 1);
+ variableExprs.add(variableExpr.toString());
+ }
+ }
+ }
+ }
+ }
+ return variableExprs;
+ }
+
}
Modified: ode/trunk/bpel-test/src/test/java/org/apache/ode/test/DataHandling20Test.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-test/src/test/java/org/apache/ode/test/DataHandling20Test.java?rev=741748&r1=741747&r2=741748&view=diff
==============================================================================
--- ode/trunk/bpel-test/src/test/java/org/apache/ode/test/DataHandling20Test.java (original)
+++ ode/trunk/bpel-test/src/test/java/org/apache/ode/test/DataHandling20Test.java Fri Feb 6 21:52:01 2009
@@ -47,6 +47,9 @@
@Test public void testAssignActivity2() throws Throwable {
go("/bpel/2.0/TestAssignActivity2");
}
+ @Test public void testAssignActivity3() throws Throwable {
+ go("/bpel/2.0/TestAssignActivity3");
+ }
@Test public void testAssignComplex() throws Throwable {
go("/bpel/2.0/TestAssignComplex");
}
Modified: ode/trunk/bpel-test/src/test/java/org/apache/ode/test/StructuredActivities20Test.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-test/src/test/java/org/apache/ode/test/StructuredActivities20Test.java?rev=741748&r1=741747&r2=741748&view=diff
==============================================================================
--- ode/trunk/bpel-test/src/test/java/org/apache/ode/test/StructuredActivities20Test.java (original)
+++ ode/trunk/bpel-test/src/test/java/org/apache/ode/test/StructuredActivities20Test.java Fri Feb 6 21:52:01 2009
@@ -36,6 +36,7 @@
// Test Flow with XPath10
go("/bpel/2.0/TestFlowLinks");
}
+ @Ignore
@Test public void testIsolatedScopes1() throws Throwable {
// Test Flow with XPath10
go("/bpel/2.0/TestIsolatedScopes1");
Modified: ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestAssignActivity2/TestAssign.bpel
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestAssignActivity2/TestAssign.bpel?rev=741748&r1=741747&r2=741748&view=diff
==============================================================================
--- ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestAssignActivity2/TestAssign.bpel (original)
+++ ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestAssignActivity2/TestAssign.bpel Fri Feb 6 21:52:01 2009
@@ -43,6 +43,8 @@
<variable name="myVar" messageType="test:TestAssignMessage"/>
<variable name="otherMsgVar" messageType="test:TestAssignMessage"/>
<variable name="strVar" type="xsd:string"/>
+ <variable name="txtVar" type="xsd:string"/>
+ <variable name="eprVar" type="xsd:anyType"/>
<variable name="intVar" type="xsd:int"/>
</variables>
@@ -77,6 +79,34 @@
<to>$otherMsgVar.TestPart</to>
</copy>
</assign>
+
+ <assign name="assign2">
+ <copy>
+ <from><literal>1</literal></from>
+ <to variable="intVar"/>
+ </copy>
+ <copy>
+ <from><literal>1</literal></from>
+ <to variable="intVar"/>
+ </copy>
+ <copy>
+ <from>ode:process-property("dd:epr")/addr:EndpointReference/child::node()[position()=$intVar]</from>
+ <to variable="strVar"/>
+ </copy>
+ <copy>
+ <from>ode:process-property("dd:epr")/addr:EndpointReference</from>
+ <to>$eprVar</to>
+ </copy>
+ <copy>
+ <from>$eprVar/child::node()[$intVar]</from>
+ <to variable="strVar"/>
+ </copy>
+ <copy>
+ <from>concat($eprVar/text()[1], $ode:pid)</from>
+ <to variable="strVar"/>
+ </copy>
+ </assign>
+
<reply name="end" partnerLink="TestAssignPartnerLink" portType="test:TestAssignPortType"
operation="testAssign" variable="otherMsgVar"/>
</sequence>
Added: ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestAssignActivity3/deploy.xml
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestAssignActivity3/deploy.xml?rev=741748&view=auto
==============================================================================
--- ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestAssignActivity3/deploy.xml (added)
+++ ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestAssignActivity3/deploy.xml Fri Feb 6 21:52:01 2009
@@ -0,0 +1,11 @@
+<deploy xmlns="http://www.apache.org/ode/schemas/dd/2007/03"
+ xmlns:testws="http://xxx/yyy/ws"
+ xmlns:testbpel="http://xxx/yyy/bpel">
+
+ <process name="testbpel:test" fileName="test.bpel">
+ <active>true</active>
+ <provide partnerLink="test-pl">
+ <service name="testws:testService" port="testPort"/>
+ </provide>
+ </process>
+</deploy>
Added: ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestAssignActivity3/test.bpel
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestAssignActivity3/test.bpel?rev=741748&view=auto
==============================================================================
--- ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestAssignActivity3/test.bpel (added)
+++ ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestAssignActivity3/test.bpel Fri Feb 6 21:52:01 2009
@@ -0,0 +1,81 @@
+<process xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
+ xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
+ xmlns:op="http://www.w3.org/2005/xpath-functions"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:test="http://xxx/yyy"
+ xmlns:testws="http://xxx/yyy/ws"
+ xmlns:ode="http://www.apache.org/ode/type/extension"
+ xmlns:fn="http://www.w3.org/2005/02/xpath-functions"
+ xmlns:dbg="java:tc.Test"
+ name="test"
+ targetNamespace="http://xxx/yyy/bpel"
+ queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"
+ expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0">
+
+ <import location="test.wsdl"
+ namespace="http://xxx/yyy/ws"
+ importType="http://schemas.xmlsoap.org/wsdl/"/>
+
+ <partnerLinks>
+ <partnerLink name="test-pl" partnerLinkType="testws:test-plt" myRole="testService" />
+ </partnerLinks>
+ <variables>
+ <!-- invoking message for this process. -->
+ <variable name="test-req-msg" messageType="testws:test-request-msg" />
+ <!-- response message for this process. -->
+ <variable name="test-resp-msg" messageType="testws:test-response-msg" />
+ <variable name="id" type="xsd:string"/>
+
+ <variable name="is-it" type="xsd:boolean" />
+ <variable name="is-that" type="xsd:boolean" />
+ </variables>
+ <sequence name="HiddenSequence">
+ <receive createInstance="yes" name="Receive__test-request" partnerLink="test-pl"
+ variable="test-req-msg" portType="testws:testInterface" operation="test-op" />
+ <assign name="Assign__credentials_from_header">
+ <copy>
+ <from><literal>false</literal></from>
+ <to>$is-it</to>
+ </copy>
+ <copy>
+ <from><literal>false</literal></from>
+ <to>$is-that</to>
+ </copy>
+ <copy>
+ <from>string(false)</from>
+ <to>$id</to>
+ </copy>
+ <copy>
+ <from>string("")</from>
+ <to>$id</to>
+ </copy>
+ <copy>
+ <from>string($is-it)</from>
+ <to>$id</to>
+ </copy>
+ <copy>
+ <from>xsd:string(($is-it or $is-that))</from>
+ <to>$id</to>
+ </copy>
+ <copy>
+ <from>string(not($is-it or $is-that))</from>
+ <to>$id</to>
+ </copy>
+ </assign>
+ <assign name="Assign__test_response">
+ <copy>
+ <from expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xquery1.0">
+ <![CDATA[
+ <test-response xmlns="http://xxx/yyy">
+ <id>{$id}</id>
+ </test-response>
+ ]]>
+ </from>
+ <to variable="test-resp-msg" part="test-resp-part"></to>
+ </copy>
+ </assign>
+ <reply name="Reply__test_response" partnerLink="test-pl"
+ portType="testws:testInterface"
+ operation="test-op" variable="test-resp-msg" />
+ </sequence>
+</process>
Added: ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestAssignActivity3/test.properties
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestAssignActivity3/test.properties?rev=741748&view=auto
==============================================================================
--- ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestAssignActivity3/test.properties (added)
+++ ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestAssignActivity3/test.properties Fri Feb 6 21:52:01 2009
@@ -0,0 +1,22 @@
+#
+# 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.
+#
+
+namespace=http://xxx/yyy/ws
+service=testService
+operation=test-op
+request1=<message><test-req-part><test-request xmlns="http://xxx/yyy"><id></id><c-id>1</c-id>2<r-id>3</r-id></test-request></test-req-part></message>
+response1=.*<id>true</id>.*
\ No newline at end of file
Added: ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestAssignActivity3/test.wsdl
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestAssignActivity3/test.wsdl?rev=741748&view=auto
==============================================================================
--- ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestAssignActivity3/test.wsdl (added)
+++ ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestAssignActivity3/test.wsdl Fri Feb 6 21:52:01 2009
@@ -0,0 +1,66 @@
+<!--
+bcprt
+This software and related documentation are proprietary to UGS Corp.
+COPYRIGHT 2005 UGS CORP. ALL RIGHTS RESERVED
+ecprt
+-->
+
+<wsdl:definitions name="test"
+ targetNamespace="http://xxx/yyy/ws"
+ xmlns="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:test="http://xxx/yyy"
+ xmlns:testws="http://xxx/yyy/ws"
+ xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype">
+
+ <wsdl:types>
+ <xsd:schema>
+ <xsd:import namespace="http://xxx/yyy" schemaLocation="test.xsd"/>
+ </xsd:schema>
+ </wsdl:types>
+
+ <wsdl:message name="test-request-msg">
+ <wsdl:part name="test-req-part" element="test:test-request"/>
+ </wsdl:message>
+
+ <wsdl:message name="test-response-msg">
+ <wsdl:part name="test-resp-part" element="test:test-response"/>
+ </wsdl:message>
+
+ <wsdl:portType name="testInterface">
+ <wsdl:documentation>
+ Test BPEL webservice.
+ </wsdl:documentation>
+
+ <!-- test operation -->
+ <wsdl:operation name="test-op">
+ <wsdl:input name="test-op-input"
+ message="testws:test-request-msg"/>
+ <wsdl:output name="test-op-output"
+ message="testws:test-response-msg"/>
+ </wsdl:operation>
+
+ </wsdl:portType>
+
+ <wsdl:binding name="testBinding" type="testws:testInterface">
+ <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+ <wsdl:operation name="test-op">
+ <soap:operation style="document" soapAction="testSoapAction"/>
+ <wsdl:input><soap:body use="literal"/></wsdl:input>
+ <wsdl:output><soap:body use="literal"/></wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+
+ <wsdl:service name="testService">
+ <wsdl:port binding="testws:testBinding" name="testPort">
+ <soap:address location="http://localhost:8080/ode/processes/test"/>
+ </wsdl:port>
+ </wsdl:service>
+
+ <plnk:partnerLinkType name="test-plt">
+ <plnk:role name="testService" portType="testws:testInterface"/>
+ </plnk:partnerLinkType>
+
+</wsdl:definitions>
Added: ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestAssignActivity3/test.xsd
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestAssignActivity3/test.xsd?rev=741748&view=auto
==============================================================================
--- ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestAssignActivity3/test.xsd (added)
+++ ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestAssignActivity3/test.xsd Fri Feb 6 21:52:01 2009
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+bcprt
+This software and related documentation are proprietary to UGS Corp.
+COPYRIGHT 2005 UGS CORP. ALL RIGHTS RESERVED
+ecprt
+ -->
+
+
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:test="http://xxx/yyy"
+ targetNamespace="http://xxx/yyy"
+ elementFormDefault="qualified">
+
+ <xsd:element name="test-request">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="id" type="xsd:string"/>
+ <xsd:element name="c-id" type="xsd:string" minOccurs="0"/>
+ <xsd:element name="r-id" type="xsd:string" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="test-response">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="id" type="xsd:string"/>
+ <xsd:element name="c-id" type="xsd:string" minOccurs="0"/>
+ <xsd:element name="r-id" type="xsd:string" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+</xsd:schema>