Tuscany Interop Testing
SDO
Scenarios
- Write XML instance from one SDO implementation and read XML instance into another (schema is always available on file system) - inter-process messaging, moving data between tiers
- Move an entire SDO from one implementation to another - session persistance, generic messaging, data integration
- Exchange change summary between implementations - third party data editing
IO Features (from interop p.o.v)
Feature |
Java |
C++ |
PHP |
XML (DAS) |
Y |
Y |
Y |
RDB DAS |
Y |
N |
Y |
Serialize to session |
Via java serialize? |
N |
via serialize() |
Serialize to WS |
Y (1) |
Y (1) |
N |
(1) - SDO->XMLHelper->String->Axiom
Test Summery
# |
Test |
Java |
C++ |
PHP |
Who |
Note |
|
1 |
XML->SDO-XML |
Y |
Y |
Y |
SL |
Interop via file system write and read |
|
2 |
XML->SDO->AddData->XML - Dynamic |
Y |
Y |
Y |
SL |
Java change summary reimplementation about to start |
|
3 |
XML->SDO->AddData->XML - Generated |
Y |
Not Supported |
Y (By Name/By Index) |
TBD |
PHP support is already used in test 2 |
|
4 |
XSD->SDO-XSD |
Not Supported |
Y |
Only supported via serialize |
SL |
Interop via file system write and read |
|
5 |
RDB->SDO->AddData->RDB - Dynamic |
Y |
Not Supported |
Y |
SL |
Interop via database write and read |
|
6 |
RDB->SDO->AddData->RDB - Generated |
Y |
Not Supported |
Y |
SL |
PHP generation support is already used in test 6 |
|
7 |
XML->SDO->Axiom->SOAP->Axiom->SDO->XML |
Y |
Y |
Not Supported |
AB |
|
|
8 |
XML->SDO->Session->SDO->XML |
Via java serializable? |
N |
Stores SDO state in PHP session |
SL |
Instance, model and change summary all together (XML?). Level of support in Java/C++ to be determined. Is this different from XMLHelper/DAS function? |
Test 1 - Reading and writing XML files in Java/C++/PHP and comparing output
Schema Feature
Spec version 2.0.1 features.
Feature |
Schema |
Java M1 |
C++ SVN |
PHP R1.0.1 |
Note |
xsd <include> |
interop1.xsd |
Y |
Y |
Y |
|
xsd <import> |
interop2.xsd |
Y |
Y |
fails on import of datagraph.xsd |
not tracked down why it PHP fails yet |
With target namespace |
interop3.xsd |
Y |
Y |
Y |
|
Without target namespace |
interop4.xsd |
Feature <element name> not found |
? |
Y |
Also implies noNamspaceSchemaLocation |
With sdoJava:package |
interop5.xsd |
? |
? |
Should ignore but crashes on import |
|
Global Element of simple type |
interop6.xsd |
Y |
(JIRA488) Output doesn't match input |
(PECL7963)Output doesn't match input |
Simple types at top level cause SDO problems |
Global Element of complex type |
interop7.xsd |
Y |
Y |
Y |
|
Element of simple type |
interop10 |
Y |
Y |
Y |
Tested with interop10 |
Element of complex type |
interop19 |
Y |
Y |
Y |
Tested with interop19 |
Annotation |
interop8.xsd |
Y |
Y |
Y |
|
Notation |
interop9.xsd |
Y |
Y |
Y |
|
interop10.xsd |
Y |
Y |
Y |
|
|
interop11.xsd |
Y |
Y |
Y |
|
|
Element Ref |
interop11.xsd |
Y |
Y |
Y |
|
SimpleTypeWithSDOName |
interop12.xsd |
Y |
Y |
Y |
|
interop13.xsd |
|
|
|
What verison of XML schema is this valid in? |
|
interop14.xsd |
Y |
N/A not in spec |
N/A not in spec |
Spec doesn't indicate that restriction | list | union required |
|
interop15.xsd |
Y |
N/A not in spec |
N/A not in spec |
|
|
interop16.xsd |
|
|
Not Implemented |
|
|
interop17.xsd |
|
Not Implemented |
Not Implemented |
|
|
interop18.xsd |
Y |
Y |
Y |
|
|
interop19.xsd |
Y |
Y |
Y |
|
|
interop20.xsd |
Y |
Y |
Y |
|
|
ComplexTypeWithSDOName |
interop21.xsd |
Y |
Y |
Y |
|
interop22.xsd |
Y |
Y |
??? |
|
|
ComplexTypeWithSDOAliasName |
interop23.xsd |
Y |
Y |
Y |
|
interop24.xsd |
Y |
Y |
Y |
|
|
interop25.xsd |
Y |
(JIRA444)SDOIllegalArgumentException Cannot add a properties to data types: ComplexTypeExtendingSimpleTypeTypeException |
Exception in PHP Interop testAdd property to data type:http://www.apache.org/tuscany/interop ComplexTypeExtendingSimpleTypeType |
|
|
interop26.xsd |
Y |
Y |
Y |
|
|
interop27.xsd |
Y |
Y |
Y |
|
|
interop28.xsd |
TBD |
Y |
Y |
|
|
ComplexTypeWithSDOSequence |
interop29.xsd |
Y |
Y |
Y |
|
interop30.xsd |
Y |
(JIRA445)The element type on output is incorrect |
The open content is missing leaving a empty element |
|
|
interop31.xsd |
TBD |
Y |
Y |
|
|
interop32.xsd |
Y |
Looses attribute |
Looses attribute |
not in spec, added for testing |
|
Attribute |
interop33.xsd |
Y |
Y |
Y |
|
AttributeWithSDOName |
interop33.xsd |
Y |
Y |
Y |
|
AttributeWithSDOAliasName |
interop33.xsd |
Y |
Y |
Y |
|
interop33.xsd |
Y |
Y |
Y |
|
|
interop33.xsd |
Y |
Y |
Y |
|
|
interop33.xsd |
Y |
Y |
Y |
|
|
Global Attribute |
interop33.xsd |
Y |
Y |
Y |
|
AttributeWithSDOString |
interop33.xsd |
Y |
Y |
Y |
|
AttributeWithSDOPropertyType |
interop33.xsd |
Y |
(JIRA447)Missing from output |
Missing from output |
|
AttributeWithSDOPropertySDOOppositePropertyType |
interop33.xsd |
Y |
(JIRA447)missing from output |
Missing from output |
|
AttributeWithSDODataType |
interop33.xsd |
Y |
Y |
Y |
|
ElementWithSDOName |
interop34.xsd |
Y |
(JIRA448)Error on write |
Error on write |
|
ElementWithSDOAliasName |
interop35.xsd |
Y |
Y |
Y |
|
interop36.xsd |
Y |
Y |
Y |
|
|
Element in sequence |
interop10.xsd |
Y |
Y |
Y |
tested with interop10 |
interop37.xsd |
Y |
Y |
Y |
|
|
interop38.xsd |
Y |
Y |
Y |
|
|
interop39.xsd |
Y |
Y |
Y |
|
|
interop40.xsd |
Y |
(JIRA449)Missing from output |
Type not found |
|
|
interop41.xsd |
Y |
Y |
Y |
|
|
interop42.xsd |
Y |
Y |
Y |
|
|
ElementOfSimpleTypeWithSDOString |
interop43.xsd |
Y |
Y |
Y |
|
ElementOfSimpleTypeWithSDOPropertyType |
interop44.xsd |
Y |
(JIRA450)missing from output |
missing from output |
Not sure I understand property types properly |
ElementOfSimpleTypeWithSDOOppositePropertyType |
interop45.xsd |
Y |
(JIRA450)missing from output |
missing from output |
Not sure I understand property types properly |
ElementOfSimpleTypeWithSDODataType |
interop46.xsd |
Y |
Y |
Y |
|
ElementOfSDOChangeSummaryType |
interop47.xsd |
Y |
Y |
Crash with <include> in the document |
|
anySimpleType |
interop50.xsd |
Y |
Y |
Y |
|
anyType |
interop50.xsd |
Y |
(JIRA451)qualifier added and element value missing |
|
qualifier added and element value missing |
anyURI |
interop50.xsd |
Y |
Y |
Y |
|
base64Binary |
interop50.xsd |
Y |
Y |
Y |
|
boolean |
interop50.xsd |
Y |
Y |
Y |
true, false, 1, 0 |
byte |
interop50.xsd |
Y |
Y |
Y |
-128, ...-1, 0, 1, ... 127 |
date |
interop50.xsd |
Y |
Y |
Y |
1999-05-31 |
dateTime |
interop50.xsd |
Y |
Y |
Y |
1999-05-31T13:20:00.000-05:00 May 31st 1999 at 1.20pm Eastern Standard Time which is 5 hours behind Co-Ordinated Universal Time, |
decimal |
interop50.xsd |
Y |
Y |
Y |
-1.23, 0, 123.4, 1000.00 |
double |
interop50.xsd |
Y |
Y |
Y |
-INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN |
duration |
interop50.xsd |
Y |
Y |
Y |
P1Y2M3DT10H30M12.3S 1 year, 2 months, 3 days, 10 hours, 30 minutes, and 12.3 seconds |
float |
interop50.xsd |
Y |
Y |
Y |
-INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN |
gDay |
interop50.xsd |
Y |
Y |
Y |
---31 the 31st day |
gMonth |
interop50.xsd |
Y |
Y |
Y |
--05 May |
gMonthDay |
interop50.xsd |
Y |
Y |
Y |
--05-31 every May 31st |
gYear |
interop50.xsd |
Y |
Y |
Y |
1999 |
gYearMonth |
interop50.xsd |
Y |
Y |
Y |
1999-02 the month of February 1999, regardless of the number of days |
hexBinary |
interop50.xsd |
Y |
Y |
Y |
|
ID |
interop50.xsd |
Y |
Y |
Y |
|
IDREF |
interop50.xsd |
Y |
(JIRA452)Missing from output |
Missing from output |
|
IDREFS |
interop50.xsd |
Y |
(JIRA452)Missing from output |
Missing from output |
|
int |
interop50.xsd |
Y |
Y |
Y |
-2147483648, ... -1, 0, 1, ... 2147483647 |
integer |
interop50.xsd |
Y |
(JIRA453)Works but not specifically implemented I beleive |
Y (as C++) |
...-1, 0, 1, ... |
language |
interop50.xsd |
Y |
Y |
Y |
en-GB, en-US, fr valid values for xml:lang as defined in XML 1.0 |
long |
interop50.xsd |
Y |
Y |
Y |
-9223372036854775808, ... -1, 0, 1, ... 9223372036854775807 |
Name |
interop50.xsd |
Y |
Y |
Y |
|
NCName |
interop50.xsd |
Y |
Y |
Y |
|
negativeInteger |
interop50.xsd |
Y |
Y |
Y |
... -2, -1 |
NMTOKEN |
interop50.xsd |
Y |
Y |
Y |
|
NMTOKENS |
interop50.xsd |
Y |
Y |
Y |
|
nonNegativeInteger |
interop50.xsd |
Y |
Y |
Y |
0, 1, 2, ... |
nonPositiveInteger |
interop50.xsd |
Y |
Y |
Y |
... -2, -1, 0 |
normalizedString |
interop50.xsd |
Y |
Y |
|
Y |
NOTATION |
interop50.xsd |
Y |
Y |
Y |
|
positiveInteger |
interop50.xsd |
Y |
Y |
Y |
1, 2, ... |
QName |
interop50.xsd |
Y |
Y |
Y |
|
short |
interop50.xsd |
Y |
Y |
Y |
-32768, ... -1, 0, 1, ... 32767 |
string |
interop50.xsd |
Y |
Y |
Y |
|
time |
interop50.xsd |
Y |
Y |
Y |
13:20:00.000, 13:20:00.000-05:00 |
token |
interop50.xsd |
Y |
Y |
Y |
|
unsignedByte |
interop50.xsd |
Y |
Y |
Y |
0, 1, ... 255 |
unsignedInt |
interop50.xsd |
Y |
Y |
Y |
0, 1, ...4294967295 |
unsignedLong |
interop50.xsd |
Y |
Y |
Y |
0, 1, ... 18446744073709551615 |
unsignedShort |
interop50.xsd |
Y |
Y |
Y |
0, 1, ...65535 |
ENTITIES |
interop51.xsd |
|
|
|
|
ENTITY |
interop51.xsd |
|
|
|
|
Other features
Feature |
Schema |
Java |
C++ |
PHP |
Note |
interop??.xsd |
|
|
|
|
Test Setup
1.1:
- The files interop1.xsd, interop1-in.xml are read by a Java, C++ or PHP test program and interop1-out.xml is written
General Observations
- Java
Adds xsi:type to ComplexTypeContent
- interop1-out.xsd validates against interop1.xsd
- C++
- Removes any qualified names that appear in input. Theere is a potential problem w.r.t element references and qualified name raise when validating in Eclipse
- Adds xsi:type to top level element
- Removes schema location attribtute
Empty element <sdo:changeSummary xmlns:sdo="commonj.sdo" /> added to root & attributes come out in different order compared to Java - not significant but interesting
- interop1-out.xsd doesn't validate against interop1.xsd
- sdo:changeSummary element can't be empty
- The output has become confused over the content of a substitution group
- PHP
- Removes element qualification
- Adds xsi:type to top level element
- Removes schema location attribtute
Test 2 - As test 1 but with data added in SDO through dynamic interface
Test 3 - As test 1 but with data added in SDO through generated interface
No generated interface in C++. Interface in PHP Is always generated dynamically
Test 4 - Reading and writing XSD files from Java/C++/PHP and comparing output
Using the schema from test1 have the SDO implementations create a schema based on type meta-data. The following tables record only issues. For types from the series 1 schema that present no problem no entry is included.
Feature |
Schema |
Java M1 |
C++ SVN |
PHP R1.0.1 |
Note |
|
interop?.xsd |
Not Supported |
Y |
Only supported via Serialize() |
|
No benefit in doing testing here at present as only C++ support direct schema export
Test 5 - Reading and writing RDBMS rows with data added in SDO through dynamic interface
The intention here is to do this on both DB2 and MySQL. First DB2
Feature |
Java M1 |
PHP R1.0.1 |
Note |
SMALLINT |
Y |
Y |
|
INTEGER |
Y |
Y |
|
BIGINT |
Y |
Y |
|
FLOAT |
Y |
N (PECL7880) |
|
DOUBLE |
Y |
N (PECL7880) |
|
DOUBLE PRECISION |
Y |
N (PECL7880) |
|
REAL |
Y |
N (PECL7880) |
|
DATE |
Y |
Y |
|
TIMESTAMP |
Y |
Y |
|
TIME |
Y |
Y |
|
CHAR |
Y |
Y |
|
VARCHAR |
Y |
Y |
|
Test 6 - As test 5 but with data added in SDO through generated interface
No generated interface in C++. Interface in PHP is always generated dynamically
Test 7 - Passing messages via Apache Axis2
In due course both Java and C++ SCA implementations will support Apache Axis 2 web services as a binding option. A useful interoperability test is to pass the schema from "series 1" from client to service and back to ensure that all marshalling and conversion operations work in both directions.
The steps in achieveing this will involve:
C++ Client - C++ SCA/proxy - C++ SCA/skeleton - C++ service
C++ Client - C++ SCA/proxy - Axis C/C++ Client - Axis C/C++ Server - C++ SCA/skeleton - C++ service
C++ Client - C++ SCA/proxy - Axis C/C++ Client - Axis Java Server - Java SCA/skeleton - Java service
Java Client - Java SCA/proxy - Axis Java Client - Axis C/C++ Server - C++ SCA/skeleton - C++ service
Test 8 - SDO Serialization
For example, for use when the SDO data object graph is serialised into a session.
Feature |
Schema |
Java M1 |
C++ SVN |
PHP R1.0.1 |
Note |
|
interop1.xsd |
Support not clear. Java serialize? |
Not supported directly, Can use XMLHelper/XSDHelper separately. Already tested above |
Supported via Serialize but PHP specific format uses C++ XMLHelper/XSDHelper under the covers |
|
No benefit in doing testing here at present as there is no common format for serializing model and instance data together.
Attachments
There are 1 attachment(s) stored for this page.