I'm a newby using asp and webservice technologies. I'm trying to read a Web Service and work with data returned.
My Web Service returns many fields, so I'm looking for the best way to use this returned data.
The XML returned by my Web Service looks like this:
<DataSet xmlns="http://tempuri.org/wsexportaproducto/Productos">
<xs:schema xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="NewDataSet">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Exportacion">
<xs:complexType>
<xs:sequence>
<xs:element name="gtin" type="xs:string" minOccurs="0"/>
<xs:element name="gtinreemplazado" type="xs:string" minOccurs="0"/>
<xs:element name="refidcateglobal" type="xs:string" minOccurs="0"/>
<xs:element name="refidcatelocal" type="xs:decimal" minOccurs="0"/>
<xs:element name="gln" type="xs:string" minOccurs="0"/>
<xs:element name="glnfabricante" type="xs:string" minOccurs="0"/>
<xs:element name="nombrefabricante" type="xs:string" minOccurs="0"/>
<xs:element name="refpaismercado" type="xs:string" minOccurs="0"/>
<xs:element name="iniciovigenciadn" type="xs:dateTime" minOccurs="0"/>
<xs:element name="finvigenciadn" type="xs:dateTime" minOccurs="0"/>
<xs:element name="vida" type="xs:decimal" minOccurs="0"/>
<xs:element name="nomproducto" type="xs:string" minOccurs="0"/>
<xs:element name="marca" type="xs:string" minOccurs="0"/>
<xs:element name="descproducto" type="xs:string" minOccurs="0"/>
<xs:element name="descripcioncorta" type="xs:string" minOccurs="0"/>
<xs:element name="profundo" type="xs:decimal" minOccurs="0"/>
<xs:element name="unidprofundo" type="xs:string" minOccurs="0"/>
<xs:element name="alto" type="xs:decimal" minOccurs="0"/>
<xs:element name="unidalto" type="xs:string" minOccurs="0"/>
<xs:element name="ancho" type="xs:decimal" minOccurs="0"/>
<xs:element name="unidancho" type="xs:string" minOccurs="0"/>
<xs:element name="pesobruto" type="xs:decimal" minOccurs="0"/>
<xs:element name="unidpesobruto" type="xs:string" minOccurs="0"/>
<xs:element name="pesoempaque" type="xs:decimal" minOccurs="0"/>
<xs:element name="unidpesoempaque" type="xs:string" minOccurs="0"/>
<xs:element name="contenidoneto" type="xs:decimal" minOccurs="0"/>
<xs:element name="unidcontenidoneto" type="xs:string" minOccurs="0"/>
<xs:element name="escontenidovariable" type="xs:boolean" minOccurs="0"/>
<xs:element name="refembalaje" type="xs:string" minOccurs="0"/>
<xs:element name="esretornable" type="xs:boolean" minOccurs="0"/>
<xs:element name="factorestiba" type="xs:decimal" minOccurs="0"/>
<xs:element name="esunidadminima" type="xs:boolean" minOccurs="0"/>
<xs:element name="contenidos" type="xs:string" minOccurs="0"/>
<xs:element name="refpaisorigen" type="xs:string" minOccurs="0"/>
<xs:element name="variedadcolorcodigo" type="xs:string" minOccurs="0"/>
<xs:element name="variedadcoloragencia" type="xs:string" minOccurs="0"/>
<xs:element name="variedadcolor" type="xs:string" minOccurs="0"/>
<xs:element name="variedadtalleagencia" type="xs:string" minOccurs="0"/>
<xs:element name="variedadtallecodigo" type="xs:string" minOccurs="0"/>
<xs:element name="variedadtalle" type="xs:string" minOccurs="0"/>
<xs:element name="esunidadordenable" type="xs:boolean" minOccurs="0"/>
<xs:element name="cantminimapedir" type="xs:decimal" minOccurs="0"/>
<xs:element name="multiplopedir" type="xs:decimal" minOccurs="0"/>
<xs:element name="esfacturable" type="xs:boolean" minOccurs="0"/>
<xs:element name="esunidadembarque" type="xs:boolean" minOccurs="0"/>
<xs:element name="nrocapasartcomercial" type="xs:decimal" minOccurs="0"/>
<xs:element name="nroartcomercialesporcapa" type="xs:decimal" minOccurs="0"/>
<xs:element name="unidadesporpallet" type="xs:decimal" minOccurs="0"/>
<xs:element name="unidporcapa" type="xs:decimal" minOccurs="0"/>
<xs:element name="nrodecapas" type="xs:decimal" minOccurs="0"/>
<xs:element name="submarca" type="xs:string" minOccurs="0"/>
<xs:element name="variedadtipo" type="xs:string" minOccurs="0"/>
<xs:element name="oferta" type="xs:boolean" minOccurs="0"/>
<xs:element name="dscompania" type="xs:string" minOccurs="0"/>
<xs:element name="nombregen" type="xs:string" minOccurs="0"/>
<xs:element name="variedadsabor" type="xs:string" minOccurs="0"/>
<xs:element name="continentes" type="xs:string" minOccurs="0"/>
<xs:element name="reftiponivel" type="xs:string" minOccurs="0"/>
<xs:element name="esunidadconsumo" type="xs:boolean" minOccurs="0"/>
<xs:element name="pesoneto" type="xs:decimal" minOccurs="0"/>
<xs:element name="unidpesoneto" type="xs:string" minOccurs="0"/>
<xs:element name="cantidadtotalcontenida" type="xs:decimal" minOccurs="0"/>
<xs:element name="reftipogtin" type="xs:string" minOccurs="0"/>
<xs:element name="esprivado" type="xs:boolean" minOccurs="0"/>
<xs:element name="statussecodat" type="xs:string" minOccurs="0"/>
<xs:element name="accion" type="xs:int" minOccurs="0"/>
<xs:element name="fechaaccion" type="xs:int" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<NewDataSet xmlns="">
<Exportacion diffgr:id="Exportacion1" msdata:rowOrder="0">
<gtin>07500112045058</gtin>
<refidcateglobal>10005730</refidcateglobal>
<gln>7505000010064</gln>
<refpaismercado>484</refpaismercado>
<iniciovigenciadn>2012-08-09T00:00:00-05:00</iniciovigenciadn>
<finvigenciadn>4999-12-31T23:59:59-06:00</finvigenciadn>
<marca>PINTACOLOR</marca>
<descproducto>PINTACOLOR BLANCO</descproducto>
<descripcioncorta>PINTURA PINTACOLOR 18 L</descripcioncorta>
<profundo>40.000000000000000</profundo>
<unidprofundo>CM</unidprofundo>
<alto>60.000000000000000</alto>
<unidalto>CM</unidalto>
<ancho>40.000000000000000</ancho>
<unidancho>CM</unidancho>
<pesobruto>26.200000000000000</pesobruto>
<unidpesobruto>KG</unidpesobruto>
<unidpesoempaque>KG</unidpesoempaque>
<escontenidovariable>false</escontenidovariable>
<esretornable>false</esretornable>
<esunidadminima>true</esunidadminima>
<contenidos/>
<esunidadordenable>false</esunidadordenable>
<esfacturable>true</esfacturable>
<esunidadembarque>false</esunidadembarque>
<oferta>false</oferta>
<dscompania>DISTRIBUIDOR</dscompania>
<nombregen>PINTURA</nombregen>
<continentes/>
<reftiponivel>EA</reftiponivel>
<esunidadconsumo>false</esunidadconsumo>
<esprivado>false</esprivado>
<statussecodat>2</statussecodat>
</Exportacion>
</NewDataSet>
</diffgr:diffgram>
</DataSet>
So far I have been able to read the webservice, here is the code:
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
Try
Dim SerSyncfonia As Syncfonia.Productos
SerSyncfonia = New Syncfonia.Productos()
Dim v1 = "7505000010064"
Dim v2 = "DISTRIBU"
Dim v3 = "DISTRIBU"
Dim v4 = ""
Dim v5 = "7500112045058"
Label1.Text = SerSyncfonia.ObtieneProducto(v1, v2, v3, v4, v5).ToString
Catch ex As Exception
Label1.Text = ex.Message.ToString
End Try
End Sub
The result I'm getting for Label1.Text after pressing Button1 is "System.Data.DataSet"
So, after I read the Web Service, how can I store this data somewhere to be able to work with data. For example, get the value of the nombregen element, or gtin element and store them somewhere.
In general, it's a bad idea to pass the DataSet class or any other type specific to .NET when using web services. That makes them only usable by compatible versions of .NET (not Java, for instance).
In your case, though, there's a simpler question: even if a DataSet was successfully passed, what exactly did you expect the ToString method to do? Even without web services, DataSet.ToString() isn't going to produce useful output.
Related
I'm attempting to describe the following kind of structure using XSD 1.0:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="root">
<xs:complexType>
<xs:all>
<xs:element name="A" minOccurs="1" maxOccurs="1">
<xs:element name="B" minOccurs="1" maxOccurs="1">
<xs:element name="C" minOccurs="1" maxOccurs="1">
<xs:element name="D" minOccurs="0" maxOccurs="unbounded">
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
for the following minimal example document:
<?xml version="1.0" encoding="utf-8"?>
<root><D/><D/><D/><C/><D/><D/><A/><B/><D/></root>
This does not work, since XSD 1.0 does not allow unbounded occurances of an element inside <xs:all>. Since this corresponds to a regex such as (D*AD*BD*CD*|D*AD*CD*BD*|D*BD*AD*CD*|D*CD*AD*BD*|D*BD*CD*AD*|D*CD*BD*AD*), I tried replacing the inner <xs:all> … </xs:all> with the following:
<xs:choice>
<xs:sequence>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="A" minOccurs="1" maxOccurs="1"/>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="B" minOccurs="1" maxOccurs="1"/>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="C" minOccurs="1" maxOccurs="1"/>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:sequence>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="A" minOccurs="1" maxOccurs="1"/>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="C" minOccurs="1" maxOccurs="1"/>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="B" minOccurs="1" maxOccurs="1"/>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:sequence>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="B" minOccurs="1" maxOccurs="1"/>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="A" minOccurs="1" maxOccurs="1"/>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="C" minOccurs="1" maxOccurs="1"/>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:sequence>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="C" minOccurs="1" maxOccurs="1"/>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="A" minOccurs="1" maxOccurs="1"/>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="B" minOccurs="1" maxOccurs="1"/>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:sequence>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="B" minOccurs="1" maxOccurs="1"/>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="C" minOccurs="1" maxOccurs="1"/>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="A" minOccurs="1" maxOccurs="1"/>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:sequence>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="C" minOccurs="1" maxOccurs="1"/>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="B" minOccurs="1" maxOccurs="1"/>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="A" minOccurs="1" maxOccurs="1"/>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:choice>
but when checked using xmllint, the tool (quite rightly) complains that the content model is not determinist. Is there a way?
Here we have some solutions:
Option 1: Make you regex solution determinist
The following is your regex transforme to a deterministic regex (please allow me this regex abuse of notation):
d*
(
ad*(bd*c|cd*b)
|
bd*(ad*c|cd*a)
|
cd*(ad*b|bd*a)
)
d*
Transformed to XSD:
<xs:sequence>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
<xs:choice>
<xs:sequence>
<xs:element name="A"/>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
<xs:choice>
<xs:sequence>
<xs:element name="B"/>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="C"/>
</xs:sequence>
<xs:sequence>
<xs:element name="C"/>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="A"/>
</xs:sequence>
</xs:choice>
</xs:sequence>
<xs:sequence>
<xs:element name="B"/>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
<xs:choice>
<xs:sequence>
<xs:element name="A"/>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="C"/>
</xs:sequence>
<xs:sequence>
<xs:element name="C"/>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="A"/>
</xs:sequence>
</xs:choice>
</xs:sequence>
<xs:sequence>
<xs:element name="C"/>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
<xs:choice>
<xs:sequence>
<xs:element name="A"/>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="B"/>
</xs:sequence>
<xs:sequence>
<xs:element name="B"/>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="A"/>
</xs:sequence>
</xs:choice>
</xs:sequence>
</xs:choice>
<xs:element name="D" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
Option 2: Use xs:key (only valid for simple content or simple types)
Keys should be unique, always present (and non-nullable). If a xs:key field selects more than one value the document is invalid, so you can use:
<xs:element name="root">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="A" type="xs:string"/>
<xs:element name="B" type="xs:string"/>
<xs:element name="C" type="xs:string"/>
<xs:element name="D" type="xs:string"/>
</xs:choice>
</xs:complexType>
<xs:key name="oneABC">
<xs:selector xpath="."/>
<xs:field xpath="A"/>
<xs:field xpath="B"/>
<xs:field xpath="C"/>
</xs:key>
</xs:element>
Option 3: Change XML model to enforce order
Not exactly a solution as this won't validate the same documents. This would be a lot easier if you only accept a given order. This is only possible if you are the one defining XML document instances structure. Example: ABCD*
<xs:sequence>
<xs:element name="A">
<xs:element name="B">
<xs:element name="C">
<xs:element name="D" minOccurs="0" maxOccurs="unbounded">
</xs:sequence>
Option 4: best solution, use XSD 1.1 and xs:assert
Not a real option as you say you need XSD 1.0, but just in case someone can use XSD 1.1. This is super-easy using XSD 1.1 and xs:assert:
<xs:element name="root">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="A"/>
<xs:element name="B"/>
<xs:element name="C"/>
<xs:element name="D"/>
</xs:choice>
<xs:assert test="count(A)=1 and count(B)=1 and count(C)=1"/>
</xs:complexType>
</xs:element>
I have a xml-File that contains up to 19 Elements named DEPP1, DEPP2, ..., up to DEPP19. ( There may be less than 19 elements though ) My XML-File would look like that:
<TD>
<DEPP1>1</DEPP1>
<DEPP2>2</DEPP2>
...
<DEPP19>3</DEPP19>
</TD>
I also have a xml-schema that I use to read data from that XML-File. In this xsd-File I list all the possible elements that may occur. The schema looks like this:
<xs:element name="TD">
<xs:complexType>
<xs:all>
<xs:element name="DEPP1" type="doubleField" minOccurs="0" maxOccurs="1"/>
<xs:element name="DEPP2" type="doubleField" minOccurs="0" maxOccurs="1"/>
<xs:element name="DEPP3" type="doubleField" minOccurs="0" maxOccurs="1"/>
<xs:element name="DEPP4" type="doubleField" minOccurs="0" maxOccurs="1"/>
<xs:element name="DEPP5" type="doubleField" minOccurs="0" maxOccurs="1"/>
<xs:element name="DEPP6" type="doubleField" minOccurs="0" maxOccurs="1"/>
<xs:element name="DEPP7" type="doubleField" minOccurs="0" maxOccurs="1"/>
<xs:element name="DEPP8" type="doubleField" minOccurs="0" maxOccurs="1"/>
<xs:element name="DEPP9" type="doubleField" minOccurs="0" maxOccurs="1"/>
<xs:element name="DEPP10" type="doubleField" minOccurs="0" maxOccurs="1"/>
<xs:element name="DEPP11" type="doubleField" minOccurs="0" maxOccurs="1"/>
<xs:element name="DEPP12" type="doubleField" minOccurs="0" maxOccurs="1"/>
<xs:element name="DEPP13" type="doubleField" minOccurs="0" maxOccurs="1"/>
<xs:element name="DEPP14" type="doubleField" minOccurs="0" maxOccurs="1"/>
<xs:element name="DEPP15" type="doubleField" minOccurs="0" maxOccurs="1"/>
<xs:element name="DEPP16" type="doubleField" minOccurs="0" maxOccurs="1"/>
<xs:element name="DEPP17" type="doubleField" minOccurs="0" maxOccurs="1"/>
<xs:element name="DEPP18" type="doubleField" minOccurs="0" maxOccurs="1"/>
<xs:element name="DEPP19" type="doubleField" minOccurs="0" maxOccurs="1"/>
</xs:all>
</xs:complexType>
</xs:element>
Is there a nicer way to create the schema instead of repeating the same code for all Elements ( which all have a different Name ) using a loop ?
Thank you
itelly
I am trying to create a soap web service for a server using jax-ws following this xml schema:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="OfeliaDataEx">
<xs:complexType>
<xs:sequence>
<xs:element ref="Header"/>
<xs:element ref="User"/>
<xs:element ref="Data"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Header">
<xs:complexType>
<xs:sequence>
<xs:element ref="State"/>
<xs:element ref="TypeReq"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="State" type="xs:string"/>
<xs:element name="TypeReq" type="xs:string"/>
<xs:element name="User">
<xs:complexType>
<xs:sequence>
<xs:element ref="JabberID"/>
<xs:element ref="OpenID"/>
<xs:element ref="OauthToken"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="JabberID" type="xs:string"/>
<xs:element name="OpenID" type="xs:anyURI"/>
<xs:element name="OauthToken">
<xs:complexType>
<xs:sequence>
<xs:element ref="AuthToken"/>
<xs:element ref="TokenSecret"/>
<xs:element ref="ExpireDate"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="AuthToken" type="xs:string"/>
<xs:element name="TokenSecret" type="xs:string"/>
<xs:element name="ExpireDate" type="xs:string"/>
<xs:element name="Data">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="POSI"/>
<xs:element ref="TESTE"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="POSI">
<xs:complexType>
<xs:all>
<xs:element ref="TimeStamp"/>
<xs:element ref="RefreshInterval"/>
<xs:element ref="Lon"/>
<xs:element ref="Lat"/>
<xs:element ref="Data"/>
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="RefreshInterval" nillable="true" type="xs:integer"/>
<xs:element name="Lon" nillable="true" type="xs:float"/>
<xs:element name="Lat" nillable="true" type="xs:float"/>
<xs:element name="TESTE">
<xs:complexType>
<xs:all>
<xs:element ref="TimeStamp"/>
<xs:element ref="cenas"/>
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="cenas" nillable="true" type="xs:float"/>
<xs:element name="TimeStamp" type="xs:string"/>
</xs:schema>
My first try was follow a POJO model how ever i did not have any success. I couldnt reproduce the <xs:choice minOccurs="0" maxOccurs="unbounded">. So i am here to ask for an idea to create a soap web service that follows this schema.
best regards,
Why don't you use the xjc tool which comes with your JDK and creates the required jax-b artifacts from a xsd...
something like this will create the classes in the 'generated' subfolder of the current directory:
xjc /the/path/to/my/xsdfile.xsd
Also look here: http://docs.oracle.com/javase/6/docs/technotes/tools/share/xjc.html
I am trying to insert primary and foreign keys in XSD schema file below :-
Primary key is StudentID and Foreign Keys are courseID, AddressID, GradeID.
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Student">
<xs:complexType>
<xs:sequence>
<xs:element name="Title" type="xs:string"/>
<xs:element name="FirstName" type="xs:string"/>
<xs:element name="LastName" type="xs:string"/>
<xs:element name="Dateborn" type="xs:date"/>
<xs:element name="Gender" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
However above code is not working in my setup please help me in tracing the issue,
In general you would need to put more details in a question... So this should be enough to understand what else you might need to define, and how. I'll tackle what's needed to understand how to define a primary key/foreign key by illustrating an assumed student/address relationship.
First you need to define a context where these constraints hold true. In my modified XSD, I call it the "World".
<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="World">
<xs:complexType>
<xs:sequence>
<xs:element ref="Student" maxOccurs="unbounded"/>
<xs:element ref="Address" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:key name="PKStudents">
<xs:selector xpath="Student/StudentID"/>
<xs:field xpath="."/>
</xs:key>
<xs:key name="PKAddresses">
<xs:selector xpath="Address/AddressID"/>
<xs:field xpath="."/>
</xs:key>
<xs:keyref name="FKStudentToAddress" refer="PKAddresses">
<xs:selector xpath="Student/AddressID"/>
<xs:field xpath="."/>
</xs:keyref>
</xs:element>
<xs:element name="Student">
<xs:complexType>
<xs:sequence>
<xs:element name="Title" type="xs:string"/>
<xs:element name="FirstName" type="xs:string"/>
<xs:element name="LastName" type="xs:string"/>
<xs:element name="Dateborn" type="xs:date"/>
<xs:element name="Gender" type="xs:string"/>
<xs:element name="StudentID" type="xs:string"/>
<xs:element name="AddressID" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Address">
<xs:complexType>
<xs:sequence>
<xs:element name="AddressID" type="xs:string"/>
<xs:element name="Street" type="xs:string"/>
<xs:element name="City" type="xs:string"/>
<xs:element name="Province" type="xs:string" minOccurs="0"/>
<xs:element name="Country" type="xs:date" minOccurs="0"/>
<xs:element name="PostalCode" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Then an XML like this would pass or fail, depending on what you do with the values in the StudentID and AddressID fields.
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) -->
<World xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Student>
<Title>Title1</Title>
<FirstName>FirstName1</FirstName>
<LastName>LastName1</LastName>
<Dateborn>1900-01-01</Dateborn>
<Gender>Gender1</Gender>
<StudentID>StudentID1</StudentID>
<AddressID>AddressID1</AddressID>
</Student>
<Student>
<Title>Title1</Title>
<FirstName>FirstName1</FirstName>
<LastName>LastName1</LastName>
<Dateborn>1900-01-01</Dateborn>
<Gender>Gender1</Gender>
<StudentID>StudentID2</StudentID>
<AddressID>AddressID1</AddressID>
</Student>
<Address>
<AddressID>AddressID1</AddressID>
<Street>Street1</Street>
<City>City1</City>
<Province>Province1</Province>
<Country>1900-01-01</Country>
<PostalCode>PostalCode1</PostalCode>
</Address>
<Address>
<AddressID>AddressID2</AddressID>
<Street>Street1</Street>
<City>City1</City>
<Province>Province1</Province>
<Country>1900-01-01</Country>
<PostalCode>PostalCode1</PostalCode>
</Address>
</World>
To finish your solution, you would need to define the Course and Grade "entities" in your "world", define the xs:key for each, similar to Student/*Address*, then add CourseID and GradeID attributes to the entities that need them, and finally, define the keyref, as above, for Entity to Grade and Entity to Course.
I am using AXIS2 framework for my webservices creating. Now I am secured my webservices using ramprt. Now entire requests and response will be signed and encrypted.
Now my doubt is how can i test it in SOAP UI. when I am loading wsdl file it giving me as
below.
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soapenvelope"
xmlns:sam="http://sample03.policy.samples.rampart.apache.org">
<soap:Header/>
<soap:Body>
<sam:echo>
<!--Optional:-->
<sam:args0>?</sam:args0>
</sam:echo>
</soap:Body>
</soap:Envelope>
Now Ho w can i place digital certificate related data and how can i encrypt the content i want to send to axis server.
Thanks,
Narendra
the certificate data is stored in two xml Files the Outflowsecurity.xml and Inflowsecurity.xml they should look like this:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="action">
<xs:annotation>
<xs:documentation>Outflow security 'action' configuration</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="items" type="xs:string"/>
<xs:element name="user" type="xs:string"/>
<xs:element name="passwordCallbackClass" type="xs:string" minOccurs="0"/>
<xs:element name="signaturePropFile" type="xs:string" minOccurs="0"/>
<xs:element name="encryptionPropFile" type="xs:string" minOccurs="0"/>
<xs:element name="encryptionPropFile" type="xs:string" minOccurs="0"/>
<xs:element name="signatureKeyIdentifier" type="xs:string" minOccurs="0"/>
<xs:element name="encryptionKeyIdentifier" type="xs:string" minOccurs="0"/>
<xs:element name="encryptionUser" type="xs:string" minOccurs="0"/>
<xs:element name="signatureParts" type="xs:string" minOccurs="0"/>
<xs:element name="encryptionParts" type="xs:string" minOccurs="0"/>
<xs:element name="optimizeParts" type="xs:string" minOccurs="0"/>
<xs:element name="encryptionSymAlgorithm" type="xs:string" minOccurs="0"/>
<xs:element name="EmbeddedKeyCallbackClass" type="xs:string" minOccurs="0"/>
<xs:element name="encryptionKeyTransportAlgorithm" type="xs:string" minOccurs="0"/>
<xs:element name="EmbeddedKeyName" type="xs:string" minOccurs="0"/>
<xs:element name="timeToLive" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
for more details go to the Apache help Page
To use the authentification in the Request you need to add a Tag to the soap:Header
<soapenv:Header>
<wsse:Security
soapenv:mustUnderstand="1">
<wsu:Timestamp
wsu:Id="Timestamp-31497899">
<wsu:Created>2008-02-06T13:39:50.943Z</wsu:Created>
<wsu:Expires>2008-02-06T13:44:50.943Z</wsu:Expires>
</wsu:Timestamp>
<wsse:UsernameToken
wsu:Id="UsernameToken-10697954">
<wsse:Username>apache</wsse:Username>
<wsse:Password
Type="http://...#PasswordText">password</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
the namespaces are:
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"