Hi Sebastian, Thank you for the reply. I am sorry for not including an error message and sign name in the former post. Thank you for reminding me!
/-->"If you're getting a NullPointerException, perhaps you have not instantiated the "deliord" attribute?"/ Your guess is right. I didn't instantiate the "deliord" attribute. After I defined schemas in the HelperContext, I thought code |scope.getDataFactory().create( "http://dataact.act.org", "deliverGoods" ) | ||can also instantiate the "deliord" attribute. Here is the problem. I misunderstood the api. Regards, Grovecai || || ----------------- 8< ------------------
Hello there, what exactly is not working for you? When posting questions like this, it is always helpful to include an error message, perhaps even a stacktrace. (Also, I might add, it would be considered good form to sign your mail by name.) Your example works for me, here's a test case demonstrating it: @Test public void test() { HelperContext scope = HelperProvider.getDefaultContext(); DataFactory df = scope.getDataFactory(); DataObject deliverGoods = df.create( "http://dataact.act.org", "deliverGoods" ); DataObject deliord = df.create( "http://dataact.act.org/xsd", "DeliverOrder" ); deliord.setDouble( "cost", 100 ); deliverGoods.set( "deliord", deliord ); DataObject sdo = deliverGoods.getDataObject( "deliord" ); double actual = sdo.getDouble( "cost" ); assertEquals( 100, actual, 0.0001 ); double actualXPath = deliverGoods.getDouble( "deliord/cost" ); // <--- assertEquals( 100, actualXPath, 0.0001 ); } If you're getting a NullPointerException, perhaps you have not instantiated the "deliord" attribute? Regards, Sebastian ----------------- 8< ------------------ Von: grovecai [mailto:grove...@gmail.com] Gesendet: Donnerstag, 28. März 2013 10:16 An: user@tuscany.apache.org Betreff: About Accessing DataObjects using XPath Hi,guys I have a DataObject as below and it's Type is defined in two schema with different targetNamespace. Now I want to access the "cost" property of the DataObject.The code is like that: DataObject.get("deliord/cost"); It doesn't work. What's proper xpath expression I should use? Please help. Thanks! DataObject: <dat:deliverGoods xmlns:dat="http://dataact.act.org" xmlns:xsd="http://dataact.act.org/xsd"> <dat:deliord> <xsd:cost>100</xsd:cost> <xsd:id>101</xsd:id> <xsd:address>buaa nmb g513</xsd:address> <xsd:buyer>cai</xsd:buyer> <xsd:goodname>The WS Haters Handbook</xsd:goodname> </dat:deliord> </dat:deliverGoods> Schema_1: <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ax26="http://dataact.act.org/xsd" targetNamespace="http://dataact.act.org"> <xs:import namespace="http://dataact.act.org/xsd" /> <xs:element name="deliverGoods"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" name="deliord" nillable="true" type="ax26:DeliverOrder" /> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> Schema_2: <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://dataact.act.org/xsd"> <xs:complexType name="DeliverOrder"> <xs:sequence> <xs:element minOccurs="0" name="address" nillable="true" type="xs:string" /> <xs:element minOccurs="0" name="buyer" nillable="true" type="xs:string" /> <xs:element minOccurs="0" name="cost" type="xs:double" /> <xs:element minOccurs="0" name="goodname" nillable="true" type="xs:string" /> <xs:element minOccurs="0" name="id" type="xs:int" /> </xs:sequence> </xs:complexType> </xs:schema> IDS Scheer Consulting GmbH Geschäftsführer/Managing Directors: Arno Theiss, Ivo Totev Sitz/Registered office: Altenkesseler Straße 17, 66115 Saarbrücken, Germany - Registergericht/Commercial register: Saarbrücken HRB 19681 http://www.ids-scheer-consulting.com