First post to SO, hopefully, I get it right. :-)
And, new to WSO2DSS...
I'd like to configure WSO2DSS to expose REST services like, for example:
http://localhost/svcendpoint/products
http://localhost/svcendpoint/products/computer
http://localhost/svcendpoint/products/computer/disks
where each url returns a more refined list. I've set up three queries / operations / resources, but I'm not getting the expected results.
I am getting the list for the first, a Axis2 "String index out of range" exception for the second, and a list for the third.
I'm not sure if it is me, a bug, or the wrong way to do this. Any help would be appreciated.
Here is the .dbs file (I can include the exception stacktrace if it will be useful):
<data name="MyDataService">
<config id="MyDataSource">
<property name="driverClassName">oracle.jdbc.driver.OracleDriver</property>
<property name="url">jdbc:oracle:thin:xxxxxx</property>
<property name="username">xxx</property>
<property name="password">xxx</property>
</config>
<query id="MyCategoriesQuery" useConfig="MyDataSource">
<sql>select distinct CAT_NM from T_FAM_BLMBRG_DATA_DICT order by CAT_NM</sql>
<result defaultNamespace="http://test.org" element="categories" rowName="">
<element column="FLD_MNM_NM" name="FLD_MNM_NM" xsdType="string"/>
<element column="FLD_ID" name="FLD_ID" xsdType="string"/>
<element column="DATA_LIC_CAT_NM" name="DATA_LIC_CAT_NM" xsdType="string"/>
<element column="FLD_DESC_TX" name="FLD_DESC_TX" xsdType="string"/>
<element column="CAT_NM" name="CAT_NM" xsdType="string"/>
<element column="FLD_DFN_TX" name="FLD_DFN_TX" xsdType="string"/>
<element column="FLD_DATYP_NM" name="FLD_DATYP_NM" xsdType="string"/>
<element column="CRT_USER_ID" name="CRT_USER_ID" xsdType="string"/>
<element column="CRT_TS" name="CRT_TS" xsdType="string"/>
<element column="UPD_USER_ID" name="UPD_USER_ID" xsdType="string"/>
<element column="UPD_TS" name="UPD_TS" xsdType="string"/>
</result>
</query>
<query id="MyCategoryQuery" useConfig="MyDataSource">
<sql>select * from T_FAM_BLMBRG_DATA_DICT where CAT_NM = :cat</sql>
<result defaultNamespace="http://test.org" element="entries" rowName="">
<element column="FLD_MNM_NM" name="FLD_MNM_NM" xsdType="string"/>
<element column="FLD_ID" name="FLD_ID" xsdType="string"/>
<element column="DATA_LIC_CAT_NM" name="DATA_LIC_CAT_NM" xsdType="string"/>
<element column="FLD_DESC_TX" name="FLD_DESC_TX" xsdType="string"/>
<element column="CAT_NM" name="CAT_NM" xsdType="string"/>
<element column="FLD_DFN_TX" name="FLD_DFN_TX" xsdType="string"/>
<element column="FLD_DATYP_NM" name="FLD_DATYP_NM" xsdType="string"/>
<element column="CRT_USER_ID" name="CRT_USER_ID" xsdType="string"/>
<element column="CRT_TS" name="CRT_TS" xsdType="string"/>
<element column="UPD_USER_ID" name="UPD_USER_ID" xsdType="string"/>
<element column="UPD_TS" name="UPD_TS" xsdType="string"/>
</result>
<param name="cat" sqlType="STRING"/>
</query>
<query id="MyCategoryFldQuery" useConfig="MyDataSource">
<sql>select * from T_FAM_BLMBRG_DATA_DICT where CAT_NM = :cat and FLD_ID = :fld</sql>
<result defaultNamespace="http://test.org" element="names" rowName="">
<element column="FLD_MNM_NM" name="FLD_MNM_NM" xsdType="string"/>
<element column="FLD_ID" name="FLD_ID" xsdType="string"/>
<element column="DATA_LIC_CAT_NM" name="DATA_LIC_CAT_NM" xsdType="string"/>
<element column="FLD_DESC_TX" name="FLD_DESC_TX" xsdType="string"/>
<element column="CAT_NM" name="CAT_NM" xsdType="string"/>
<element column="FLD_DFN_TX" name="FLD_DFN_TX" xsdType="string"/>
<element column="FLD_DATYP_NM" name="FLD_DATYP_NM" xsdType="string"/>
<element column="CRT_USER_ID" name="CRT_USER_ID" xsdType="string"/>
<element column="CRT_TS" name="CRT_TS" xsdType="string"/>
<element column="UPD_USER_ID" name="UPD_USER_ID" xsdType="string"/>
<element column="UPD_TS" name="UPD_TS" xsdType="string"/>
</result>
<param name="cat" sqlType="STRING"/>
<param name="fld" sqlType="STRING"/>
</query>
<operation name="MyCategoriesService">
<call-query href="MyCategoriesQuery"/>
</operation>
<operation name="MyCategoryService">
<call-query href="MyCategoryQuery">
<with-param name="cat" query-param="cat"/>
</call-query>
</operation>
<operation name="MyCategoryFldService">
<call-query href="MyCategoryFldQuery">
<with-param name="cat" query-param="cat"/>
<with-param name="fld" query-param="fld"/>
</call-query>
</operation>
<resource method="GET" path="category">
<call-query href="MyCategoriesQuery"/>
</resource>
<resource method="GET" path="category/{cat}">
<call-query href="MyCategoryQuery">
<with-param name="cat" query-param="cat"/>
</call-query>
</resource>
<resource method="GET" path="category/{cat}/{fld}">
<call-query href="MyCategoryFldQuery">
<with-param name="cat" query-param="cat"/>
<with-param name="fld" query-param="fld"/>
</call-query>
</resource>
</data>
You need to invoke the service as shown below
http://localhost:9763/services/SERVIVENAME.HTTPEndpoint/RESOURCEPATH/
For example
http://localhost:9763/services/MyDataSource.HTTPEndpoint/category/computer
Please refer [1] for more details
https://docs.wso2.org/display/DSS310/Exposing+Data+as+REST-Style+Resources
Related
Hi I am creating a WSO2 data service and i am calling a stored procedure that has an out param.
{call ? :=IRIS_REST_PKG.INSERT_OR_UPDATE_STUDENT(?,?,?) }
So i can get the whole thing to work in the try it editor but when i configure the rest resource i see a list of request params which includes my out param that was earlier defined in the query.
When i call the rest service with only in params i get:
Value type miss match, Expected value type - 'null', but found - 'STRING'.
I am using version 6.4.0 of Enterprise Intergrator.
This is my dbs file:
<data name="IRIS" transports="http https local">
<config enableOData="false" id="ORACLE">
<property name="driverClassName">oracle.jdbc.driver.OracleDriver</property>
<property name="url">jdbc:oracle:thin:#ldap:...</property>
<property name="username">xxxxxxxxxxxx</property>
<property name="password">xxxxxxxxxxxx</property>
<property name="dataSourceProps"/>
<property name="dynamicUserAuthMapping">
<configuration/>
</property>
</config>
<query id="get_student" useConfig="ORACLE">
<sql>{call ?:=TEST_PKG.get_student(?)}</sql>
<result element="upi" rowName="">
<element column="upi" name="upi" xsdType="string"/>
<element column="research_summary" name="research_summary" xsdType="string"/>
</result>
<param name="result" sqlType="ORACLE_REF_CURSOR" type="OUT"/>
<param name="upi" sqlType="STRING"/>
</query>
<query id="q1" useConfig="ORACLE">
<sql>{call ?:=TEST_PKG.myfunction(?,?)}</sql>
<result element="myCount" rowName="">
<element column="myCount" name="myCount" xsdType="integer"/>
</result>
<param name="myCount" sqlType="INTEGER" type="OUT"/>
<param name="ename" sqlType="STRING"/>
<param name="eid" sqlType="INTEGER"/>
</query>
<query id="insert_or_update_student" useConfig="ORACLE">
<sql>{call ? :=IRIS_REST_PKG.INSERT_OR_UPDATE_STUDENT(?,?,?) }</sql>
<result outputType="json">{"result":{"status":"$status"}}</result>
<param defaultValue="-1" name="status" sqlType="INTEGER" type="OUT"/>
<param name="upi" sqlType="STRING"/>
<param name="summary" sqlType="STRING"/>
<param name="optIn" sqlType="INTEGER"/>
</query>
<query id="get_jstudent" useConfig="ORACLE">
<sql>SELECT UPI, RESEARCH_SUMMARY FROM xxx r WHERE r.UPI = :upi</sql>
<result outputType="json">{"result":{"upi":"$upi","research_summary":"$research_summary"}}</result>
<param name="upi" sqlType="STRING"/>
</query>
<operation name="get_student">
<call-query href="get_student">
<with-param name="upi" query-param="upi"/>
</call-query>
</operation>
<operation name="op1">
<call-query href="q1">
<with-param name="ename" query-param="ename"/>
<with-param name="eid" query-param="eid"/>
</call-query>
</operation>
<operation name="insert_or_update_student">
<call-query href="insert_or_update_student">
<with-param name="upi" query-param="upi"/>
<with-param name="summary" query-param="summary"/>
<with-param name="optIn" query-param="optIn"/>
</call-query>
</operation>
<operation name="get_jstudent">
<call-query href="get_jstudent">
<with-param name="upi" query-param="upi"/>
</call-query>
</operation>
<resource method="GET" path="r1">
<call-query href="get_student">
<with-param name="result" query-param="result"/>
<with-param name="upi" query-param="upi"/>
</call-query>
</resource>
<resource method="POST" path="insertOrUpdateStudent">
<call-query href="insert_or_update_student">
<with-param name="status" query-param="status"/>
<with-param name="upi" query-param="upi"/>
<with-param name="summary" query-param="summary"/>
<with-param name="optIn" query-param="optIn"/>
</call-query>
</resource>
<resource method="GET" path="get_jstudent/{upi}">
<call-query href="get_jstudent">
<with-param name="upi" query-param="upi"/>
</call-query>
</resource>
</data>
I am talking about: insertOrUpdateStudent resource section.
<with-param name="status" query-param="status"/>
I have also removed this line but still not working.
I also tried and pass null / 0 / "" and still not working.
Any help would be greatly appreciated.
Thank you.
The answer is that if the resource and the operation have the same name things go wrong. Also even with the above correct the wizard shows the out param as a query param, so the thing to do is to edit the xml and remove the out param from the resource parameters.
I'm trying DSS 3.2.1 and upload to server Pais.dbs file, but when try to test the REST resource with GET to url http://www.example.org:9763/services/Pais.HTTPEndpoint/Pais got the error:
<soapenv:Reason xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<soapenv:Text xml:lang="en-US">The endpoint reference (EPR) for the Operation not found is /services/Pais.HTTPEndpoint/Pais and the WSA Action = null. If this EPR was previously reachable, please contact the server administrator.</soapenv:Text>
</soapenv:Reason>
Calling through SOAP works like expected.
If I construct the DBS using import the REST resources works. Its something wrong with my .dbs file or maybe a BUG with the way I constructed the .dbs file?
Pais.dbs
<data name="Pais" serviceNamespace="http://www.example.org/systemx/ds">
<config id="default">
<property name="carbon_datasource_name">SYSTEMX_DB</property>
</config>
<query id="getPaisByIdQuery" useConfig="default">
<sql>select id, codigo, nome, sigla, codigoBacen, codigoSiscomex from Pais where id=:id</sql>
<param name="id" ordinal="1" paramType="SCALAR" sqlType="INTEGER" type="IN"/>
<result element="resultado" rowName="Pais">
<element column="id" name="id" xsdType="integer"/>
<element column="codigo" name="codigo" xsdType="integer"/>
<element column="nome" name="nome" xsdType="string"/>
<element column="sigla" name="sigla" xsdType="string"/>
<element column="codigobacen" name="codigoBacen" xsdType="integer"/>
<element column="codigosiscomex" name="codigoSiscomex" xsdType="integer"/>
</result>
</query>
<query id="getAllPaisQuery" useConfig="default">
<sql>select id, codigo, nome, sigla, codigoBacen, codigoSiscomex from Pais</sql>
<result element="resultado" rowName="Pais">
<element column="id" name="id" xsdType="integer"/>
<element column="codigo" name="codigo" xsdType="integer"/>
<element column="nome" name="nome" xsdType="string"/>
<element column="sigla" name="sigla" xsdType="string"/>
<element column="codigobacen" name="codigoBacen" xsdType="integer"/>
<element column="codigosiscomex" name="codigoSiscomex" xsdType="integer"/>
</result>
</query>
<query id="updatePaisQuery" useConfig="default">
<sql>update Pais set codigo=:codigo, nome=:nome, sigla=:sigla, codigobacen=:codigoBacen, codigosiscomex=:codigoSiscomex where id=:id</sql>
<param name="id" sqlType="INTEGER"/>
<param name="codigo" sqlType="INTEGER"/>
<param name="nome" sqlType="STRING"/>
<param name="sigla" sqlType="STRING"/>
<param name="codigoBacen" sqlType="INTEGER"/>
<param name="codigoSiscomex" sqlType="INTEGER"/>
</query>
<query id="createPaisQuery" returnGeneratedKeys="true" useConfig="default">
<sql>insert into Pais (codigo, nome, sigla, codigoBacen, codigoSiscomex ) values (:codigo, :nome, :sigla, :codigoBacen, :codigoSiscomex )</sql>
<result element="resultado" rowName="Pais" useColumnNumbers="true">
<element column="1" name="id" xsdType="integer"/>
</result>
<param name="codigo" sqlType="INTEGER"/>
<param name="nome" sqlType="STRING"/>
<param name="sigla" sqlType="STRING"/>
<param name="codigoBacen" sqlType="INTEGER"/>
<param name="codigoSiscomex" sqlType="INTEGER"/>
</query>
<query id="deletePaisQuery" useConfig="default">
<sql>delete Pais where id=:id</sql>
<param name="id" ordinal="1" paramType="SCALAR" sqlType="INTEGER" type="IN"/>
</query>
<!-- SOAP -->
<operation name="getPais">
<call-query href="getPaisByIdQuery">
<with-param name="id" query-param="id"/>
</call-query>
</operation>
<operation name="getAllPais">
<call-query href="getAllPaisQuery"/>
</operation>
<operation name="insertPais">
<call-query href="createPaisQuery">
<with-param name="codigo" query-param="codigo"/>
<with-param name="nome" query-param="nome"/>
<with-param name="sigla" query-param="sigla"/>
<with-param name="codigoBacen" query-param="codigoBacen"/>
<with-param name="codigoSiscomex" query-param="codigoSiscomex"/>
</call-query>
</operation>
<operation name="updatePais">
<call-query href="updatePaisQuery">
<with-param name="id" query-param="id"/>
<with-param name="codigo" query-param="codigo"/>
<with-param name="nome" query-param="nome"/>
<with-param name="sigla" query-param="sigla"/>
<with-param name="codigoBacen" query-param="codigoBacen"/>
<with-param name="codigoSiscomex" query-param="codigoSiscomex"/>
</call-query>
</operation>
<operation name="deletePais">
<call-query href="deletePaisQuery">
<with-param name="id" query-param="id"/>
</call-query>
</operation>
<!-- REST -->
<resource method="GET" path="Pais/{id}">
<call-query href="getPaisByIdQuery">
<with-param name="id" query-param="id"/>
</call-query>
</resource>
<resource method="GET" path="Pais">
<call-query href="getAllPaisQuery"/>
</resource>
<resource method="POST" path="Pais">
<call-query href="createPaisQuery">
<with-param name="codigo" query-param="codigo"/>
<with-param name="nome" query-param="nome"/>
<with-param name="sigla" query-param="sigla"/>
<with-param name="codigoBacen" query-param="codigoBacen"/>
<with-param name="codigoSiscomex" query-param="codigoSiscomex"/>
</call-query>
</resource>
<resource method="PUT" path="Pais">
<call-query href="updatePaisQuery">
<with-param name="id" query-param="id"/>
<with-param name="codigo" query-param="codigo"/>
<with-param name="nome" query-param="nome"/>
<with-param name="sigla" query-param="sigla"/>
<with-param name="codigoBacen" query-param="codigoBacen"/>
<with-param name="codigoSiscomex" query-param="codigoSiscomex"/>
</call-query>
</resource>
<resource method="DELETE" path="Pais/{id}">
<call-query href="deletePaisQuery">
<with-param name="id" query-param="id"/>
</call-query>
</resource>
DDL for pais table
CREATE TABLE "public"."pais"
(
id int PRIMARY KEY NOT NULL,
codigo int,
nome varchar(60),
sigla varchar(3),
codigobacen int,
codigosiscomex int
)
;
CREATE UNIQUE INDEX pais_pkey ON "public"."pais"(id)
;
Please specify the resource name in simple letters. ie. "pais" instead of "Pais"
I have two XSDs to bottom, the following situation is, I'm consuming a REST service and rode two XSDs to generate classes via JAXB, it happens that I have to get the targetNamespace of the two XSDs, because it seems that the service has no namespace when consumption attributes is null, the JAXB generated class called package-info.java
#javax.xml.bind.annotation.XmlSchema(namespace = "", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
Where I deleted the namespace as low (with XSDs with this target namespace), and it worked, but I have to take the XSDs, and in one of these I m using an element that points to the other. But giving this formatting error, I tried to import, but asks the namespace, both xsds are in the same directory
Error:
src-resolve.4.2: Error resolving component 'Block'. It was detected
that 'Block' is in namespace 'http://www.w3.org/2001/ XMLSchema', but
components from this namespace are not referenceable from schema
document 'file:///G:/Dev/src/main/xsd/Actor.xsd'. If this is the
incorrect namespace, perhaps the prefix of 'BlockList' needs to be
changed. If this is the correct namespace, then an appropriate
'import' tag should be added to 'file:///G:/Dev/
src/main/xsd/Actor.xsd'.
actor.xsd
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" >
<include schemaLocation="Block.xsd"/>
<complexType name="Actor">
<sequence>
<element name="type" type="string" maxOccurs="1"
minOccurs="1">
</element>
<element name="blockList" type="Block" maxOccurs="1"
minOccurs="1"></element>
<element name="characteristicList" maxOccurs="1"
minOccurs="1">
<complexType>
<sequence>
<element name="characteristic"
maxOccurs="unbounded" minOccurs="1">
<complexType>
<sequence>
<element name="id" type="long"></element>
<element name="name"
type="string">
</element>
<element name="value"
type="string">
</element>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</schema>
Block.xsd
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" >
<complexType name="Block">
<sequence>
<element name="greyList" type="boolean"></element>
<element name="blackList" type="boolean"></element>
<element name="blockListTimeToExit" type="long"></element>
<element name="blockedEventList">
<complexType>
<sequence>
<element name="blockedEvent" type="string" maxOccurs="unbounded"
minOccurs="0"></element>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</schema>
Change your XSDs in ...
actor.xsd
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="yourNamespace"
xmlns:prefix="yourNamespace">
<include schemaLocation="Block.xsd"/>
<complexType name="Actor">
<sequence>
<element name="type" type="string" maxOccurs="1" minOccurs="1">
</element>
<element name="blockList" type="prefix:Block" maxOccurs="1" minOccurs="1"></element>
<element name="characteristicList" maxOccurs="1" minOccurs="1">
<complexType>
<sequence>
<element name="characteristic" maxOccurs="unbounded" minOccurs="1">
<complexType>
<sequence>
<element name="id" type="long"></element>
<element name="name" type="string">
</element>
<element name="value" type="string">
</element>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</schema>
Block.xsd
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="yourNamespace"
xmlns:apm="yourNamespace">
<complexType name="Block">
<sequence>
<element name="greyList" type="boolean"></element>
<element name="blackList" type="boolean"></element>
<element name="blockListTimeToExit" type="long"></element>
<element name="blockedEventList">
<complexType>
<sequence>
<element name="blockedEvent" type="string" maxOccurs="unbounded"
minOccurs="0">
</element>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</schema>
I added only the namespaces and prefix to use the type from the Block.xsd.
I am developing a client for SharePoint and I am implementing both 2013 and 2010 SharePoint SearchServices. I am having trouble with getting the secondaryFileExtension field.
Below my request for 2010 Search Service:
<QueryPacket Revision="1000">
<Query>
<Context>
<QueryText language="en-US" type="STRING">Audio SITE:"https://xxxxxxxxxxxxxxxxx.com/demo/testsp/Documents"
</QueryText>
</Context>
<SupportedFormats Format="urn:Microsoft.Search.Response.Document.Document"/>
<Range>
<StartAt>1</StartAt>
<Count>30</Count>
</Range>
<EnableStemming>true</EnableStemming>
<EnableSpellCheck>Suggest</EnableSpellCheck>
<IncludeSpecialTermsResults>true</IncludeSpecialTermsResults>
<IncludeRelevantResults>true</IncludeRelevantResults>
<ImplicitAndBehavior>true</ImplicitAndBehavior>
<TrimDuplicates>true</TrimDuplicates>
<Properties>
<Property name="Rank"/>
<Property name="Title" />
<Property name="Author"/>
<Property name="Size" />
<Property name="Path" />
<Property name="Description" />
<Property name="Write"/>
<Property name="SiteName" />
<Property name="HitHighlightedSummary"/>
<Property name="HitHighlightedProperties"/>
<Property name="ContentClass"/>
<Property name="IsDocument"/>
<Property name="FileExtension"/>
</Properties>
</Query>
</QueryPacket>
With the following SOAP envelope:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<Query xmlns="urn:Microsoft.Search">
<queryXml>THE XML GOES HERE!</queryXml>
</Query>
</soap:Body>
</soap:Envelope>
I am getting the following response:
<Envelope>
<Body>
<QueryResponse>
<QueryResult><ResponsePacket xmlns="ur…</QueryResult>
</QueryResponse>
</Body>
</Envelope>
The QueryResult:
<Document>
<Action>
<LinkUrl fileExt="aspx">https://xxxxxxxxxxxxxxx…</LinkUrl>
</Action>
<Properties>
<Property>
<Name>Rank</Name>
<Type>Int64</Type>
<Value>67299882</Value>
</Property>
<Property>
<Name>Title</Name>
<Type>String</Type>
<Value>Audio 2014-01-18 19_10</Value>
</Property>
<Property>
<Name>Author</Name>
<Type>Object</Type>
<Value>Testsp</Value>
</Property>
<Property>
<Name>Size</Name>
<Type>Int64</Type>
<Value>62327</Value>
</Property>
<Property>
<Name>Path</Name>
<Type>String</Type>
<Value>https://xxxxxxxxxxxxxxxx.com/demo/testsp/Documents/Forms/DispForm.aspx?ID=1</Value>
</Property>
<Property>
<Name>Write</Name>
<Type>DateTime</Type>
<Value>2014-01-19T02:53:05</Value>
</Property>
<Property>
<Name>SiteName</Name>
<Type>String</Type>
<Value>https://xxxxxxxxxxxxxx…</Value>
</Property>
<Property>
<Name>HitHighlightedSummary</Name>
<Type>String</Type>
<Value><c0>Audio</c0> 2014-01-18…</Value>
</Property>
<Property>
<Name>HitHighlightedProperties</Name>
<Type>String</Type>
<Value><HHTitle><c0>Audio</c0> 2…</Value>
</Property>
<Property>
<Name>ContentClass</Name>
<Type>String</Type>
<Value>STS_ListItem_DocumentLibr…</Value>
</Property>
<Property>
<Name>IsDocument</Name>
<Type>Boolean</Type>
<Value>false</Value>
</Property>
<Property>
<Name>FileExtension</Name>
<Type>String</Type>
<Value>ASPX</Value>
</Property>
</Properties>
</Document>
But the property SecondaryFileExtention is not present (it should containg "acc" because of audio file type). The action tag contains the following link:
https://xxxxxxxxxxxxxxx.com/demo/testsp/Documents/Forms/DispForm.aspx?ID=1
When I go to this link I see a form with 2 fields name and title, and I can download the .acc file from.
Doing similar request with SharePoint 2013 Search Service returns the following properties for a pdf file:
<element m:type="SP.SimpleDataRow">
<Cells>
<element m:type="SP.KeyValue">
<Key>Rank</Key>
<Value>12.6491832733154</Value>
<ValueType>Edm.Double</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>DocId</Key>
<Value>4458265</Value>
<ValueType>Edm.Int64</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>WorkId</Key>
<Value>4458265</Value>
<ValueType>Edm.Int64</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>Title</Key>
<Value>W9</Value>
<ValueType>Edm.String</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>Author</Key>
<Value>Dmitry Ivahno;Test User1</Value>
<ValueType>Edm.String</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>Size</Key>
<Value>162678</Value>
<ValueType>Edm.Int64</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>Path</Key>
<Value>https://xxxxxxxxxxxx.co…</Value>
<ValueType>Edm.String</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>Description</Key>
<Value m:null="true"/>
<ValueType>Null</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>Write</Key>
<Value>2013-05-23T14:18:46.00000…</Value>
<ValueType>Edm.DateTime</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>CollapsingStatus</Key>
<Value>0</Value>
<ValueType>Edm.Int64</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>HitHighlightedSummary</Key>
<Value xml:space="preserve">Form W-9 (Rev. Decembe…</Value>
<ValueType>Edm.String</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>HitHighlightedProperties</Key>
<Value m:null="true"/>
<ValueType>Null</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>contentclass</Key>
<Value>STS_ListItem_DocumentLibr…</Value>
<ValueType>Edm.String</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>PictureThumbnailURL</Key>
<Value m:null="true"/>
<ValueType>Null</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>ServerRedirectedURL</Key>
<Value m:null="true"/>
<ValueType>Null</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>ServerRedirectedEmbedURL</Key>
<Value m:null="true"/>
<ValueType>Null</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>ServerRedirectedPreviewUR…</Key>
<Value m:null="true"/>
<ValueType>Null</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>FileExtension</Key>
<Value>pdf</Value>
<ValueType>Edm.String</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>ContentTypeId</Key>
<Value>0x010100FA0E9F7CB9E8B94DB…</Value>
<ValueType>Edm.String</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>ParentLink</Key>
<Value>https://xxxxxxxxxxx.co…</Value>
<ValueType>Edm.String</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>ViewsLifeTime</Key>
<Value>88</Value>
<ValueType>Edm.Int64</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>ViewsRecent</Key>
<Value>0</Value>
<ValueType>Edm.Int64</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>SectionNames</Key>
<Value/>
<ValueType>Edm.String</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>SectionIndexes</Key>
<Value/>
<ValueType>Edm.String</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>SiteLogo</Key>
<Value m:null="true"/>
<ValueType>Null</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>SiteDescription</Key>
<Value m:null="true"/>
<ValueType>Null</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>deeplinks</Key>
<Value m:null="true"/>
<ValueType>Null</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>importance</Key>
<Value>0</Value>
<ValueType>Edm.Int64</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>SiteName</Key>
<Value>https://xfa.sharepoint.co…</Value>
<ValueType>Edm.String</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>IsDocument</Key>
<Value>true</Value>
<ValueType>Edm.Boolean</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>LastModifiedTime</Key>
<Value>2013-05-23T14:18:46.00000…</Value>
<ValueType>Edm.DateTime</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>FileType</Key>
<Value>pdf</Value>
<ValueType>Edm.String</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>IsContainer</Key>
<Value>false</Value>
<ValueType>Edm.Boolean</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>WebTemplate</Key>
<Value m:null="true"/>
<ValueType>Null</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>SecondaryFileExtension</Key>
<Value>pdf</Value>
<ValueType>Edm.String</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>docaclmeta</Key>
<Value m:null="true"/>
<ValueType>Null</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>OriginalPath</Key>
<Value>https://xfa.sharepoint.co…</Value>
<ValueType>Edm.String</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>PartitionId</Key>
<Value>d4cd988f-8939-401f-82e9-8…</Value>
<ValueType>Edm.Guid</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>UrlZone</Key>
<Value>0</Value>
<ValueType>Edm.Int32</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>AAMEnabledManagedProperti…</Key>
<Value>AttachmentURI;deeplinks;D…</Value>
<ValueType>Edm.String</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>RenderTemplateId</Key>
<Value>~sitecollection/_catalogs…</Value>
<ValueType>Edm.String</ValueType>
</element>
<element m:type="SP.KeyValue">
<Key>piSearchResultId</Key>
<Value>0_1</Value>
<ValueType>Edm.String</ValueType>
</element>
</Cells>
Can I by any chance get the real file extension with SharePoint 2010 Search API?
I ran into a similar issue when making SharePoint 2010 SOAP calls to the search service (using SPServices). I had 2 custom fields - a subheader (single line of text) and an article category (managed metadata) - that I needed to show up in the search results, and all I was getting back was exactly what you listed (Rank through File Extension).
Those two fields had to be added as "managed properties" to be made available to come back in search results - the steps are here: http://technet.microsoft.com/en-us/library/ff621097(v=office.14).aspx (you'll need central administration-level access though).
Once my managed properties were in there, I ran into another snag because although I could see the managed properties available for search (using the FAST Search for SharePoint tool: http://fastforsharepoint.codeplex.com/), they weren't showing up in the results, even when I put them in the <Properties> list of the SOAP call.
The solution to this was actually to specify a wildcard with my subheader value in the <QueryText> field (note the "#")...this appeared to force those two fields to show up (the path condition is optional):
<QueryText language='en-US' type='STRING'>
My Search Phrase SubHeader:# AND path:/PathTo/My/SPSite
</QueryText>
Not sure if that's by design or if it's a "feature" in SharePoint to only return the field is something exists there and/or is requested.
There are probably more elegant solutions out there if you have server-level access, but this worked for me.
I am using wso2esb4.7.0 , wso2dss 3.0.1 and posgresql 9.1.4
In postgresql i used data type bytea and in wso2dss 3.0.1 we dont have bytea so i used binary data type while i am inserting via dss it inserting the values but selecting query is not working
In wso2esb or wso2dss has any example for this
data is saving in this format x5c78
but selection time its not showing in dss what is the issue
<query id="insert_testing_query" useConfig="default">
<sql>INSERT INTO public.testing(username,password,remoteaddress,result,img) VALUES(?,?,?,?,?)</sql>
<param name="username" ordinal="1" sqlType="STRING"/>
<param name="password" ordinal="2" sqlType="STRING"/>
<param name="remoteaddress" ordinal="3" sqlType="STRING"/>
<param name="result" ordinal="4" sqlType="STRING"/>
<param name="img" ordinal="5" sqlType="BINARY"/>
</query>
<operation name="insert_testing_operation">
<call-query href="insert_testing_query">
<with-param name="result" query-param="result"/>
<with-param name="remoteaddress" query-param="remoteaddress"/>
<with-param name="username" query-param="username"/>
<with-param name="img" query-param="img"/>
<with-param name="password" query-param="password"/>
</call-query>
</operation>
In the select query the element should be in the xs:base64 type. Please refer this doc. Here is a sample dataservices configuration for select query.
<query id="select_testing_query" useConfig="default">
<sql>SELECT username,password,remoteaddress,result,img FROM public.testing</sql>
<result element="SAMPLECollection" rowName="SAMPLE">
<element column="username" name="username" xsdType="xs:string"/>
<element column="password" name="password" xsdType="xs:string"/>
<element column="remoteaddress" name="remoteaddress" xsdType="xs:string"/>
<element column="result" name="result" xsdType="xs:string"/>
<element column="img" name="img" xsdType="xs:base64"/>
</result>
</query>
<operation name="select_testing_operation">
<call-query href="select_testing_query"/>
</operation>