Reputation: 811
I have a question about retrieving data values which are sent from a web service. I have a web service which receives data from a client and then does something with it. It worked all perfectly.
But now I wanted to add an extra element to the xsd which handles the message the webservice receives. I've added tests to another complexType which also exists of other elements. The element tests isn't required, but users can add one or more tests in their XML file.
<xs:element name="tests">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="999">
<xs:element name="test">
<xs:complexType>
<xs:sequence minOccurs="1" maxOccurs="unbounded">
<xs:element name="code" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="value" type="xs:string" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
Whole XSD: http://pastebin.com/TuvYiQzE
I am using JAXB to handle the webservice messages which are send from the client. JAXB automatically generated some code for me:
public Message.Algemeen.TestCode.Tests getTests(){
return tests;
}
And
public List<Message.Algemeen.TestCode.Tests.test> getTest() {
if (test== null) {
test= new ArrayList<Message.Algemeen.TestCode.Tests.test>();
}
return this.test;
}
Now I want to return code and value per element test
, the problem is Test and tests are a returned as an object and at the moment I have no idea how to read their value. The method toString()
just returns cp.jaxb.classes.Message$Algemeen$Testcode$Tests$test@dcd76a
What am I doing wrong? If you need more code to understand my problem please tell me.
Thanks,
Jef
PS. English isn't my native language, I tried my best to explain my problem.
Upvotes: 0
Views: 138
Reputation: 801
This line <xs:sequence minOccurs="1" maxOccurs="unbounded">
in the definition of Test means that you can have several code:value pair in test. is this what you want?
I'm no jaxb expert but I was told when designing schemas that it's easier to used name types in this case.
Here you have an list of "unnamed" object (the code:value pair) in a test. And I guess that makes the retrieval difficult.
What happen if you changed to maxOccurs="1"? what Happen if you defined a new type for your code:value pair and make a list of this element?
could you try to modify it like this:
<xs:element name="tests">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="999">
<xs:element name="test">
<xs:complexType>
<xs:sequence minOccurs="1" maxOccurs="unbounded">
<xs:element name="singleTest">
<xs:complexType>
<xs:sequence minOccurs="1" maxOccurs="1">
<xs:element name="code" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="value" type="xs:string" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
then you should be able to have something like List testList = test.getSingleTest() and iterate to get the code and value for each of them.
Upvotes: 1
Reputation: 23415
This should work:
List<Message.Algemeen.TestCode.Tests.test> tests = yourObject.getTest();
for (Message.Algemeen.TestCode.Tests.test test : tests) {
test.getCode(); //Here is test object which contains strings or whatever.
}
Upvotes: 0
Reputation: 2842
What language are you writing your client in? If you're using Java or .Net for example, you should simply be able to invoke your web service method and get a fully formed instance of Test back. As Udo Klimaschewski points out above, this means that you should be able to use something like
getTest().getCode()
To be clear, while it's potentially interesting to look through the XSD, you should not actually need to do this unless your development environment lacks SOAP web service support. The exact mechanism for generating the client side artifacts depends on your language and development environment; as an example, the process for referencing a web service using Netbeans is described here:
http://netbeans.org/kb/docs/websvc/client.html
Upvotes: 0