SSRS Designer - XML Datasource - Parameter passing XML gets encoded, causes error on WS Request
Hello,
I am attempting to query a List from SharePoint using the XML Datasource. I am forced to use this datasource as our infrastructure team will not be upgrading our SSRS 2008 farm to SSRS 2008 R2 anytime soon. 2008 R2 has Native SharePoint
List Datasources ( which works great FYI ). I already completed the report using the Native SP List DS, only to find out that my timing was not so great as 2008 R2 was not in production yet... /sigh, communication... anyways...
I have successfully queried the List using the XML Datasource. It is only when I try to use the CAML query in the query parameter that it fails. So, here is my Query:
<Query>
<SoapAction>http://schemas.microsoft.com/sharepoint/soap/GetListItems</SoapAction>
<Method Namespace="http://schemas.microsoft.com/sharepoint/soap/" Name="GetListItems">
<Parameters>
<Parameter Name="listName">
<DefaultValue>{DD3DE881-1F9D-4016-AD73-F7E1D9340880}</DefaultValue>
</Parameter>
<Parameter Name="query">
<DefaultValue>
<Query>
<Where>
<Gt>
<FieldRef Name="Modified" />
<Value Type="DateTime">2011-03-01</Value>
</Gt>
</Where>
</Query>
</DefaultValue>
</Parameter>
</Parameters>
</Method>
<ElementPath IgnoreNamespaces="True">*</ElementPath>
</Query>
I will be replacing that hard date with something like =DateAdd("d",-7,Now()) later, but focusing on the task at hand...
Here is the error ( trimmed so you don't need to read the whole stack ):
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>Exception of type 'Microsoft.SharePoint.SoapServer.SoapServerException' was thrown.</faultstring>
<detail>
<errorstring xmlns="http://schemas.microsoft.com/sharepoint/soap/">Element <Query> of parameter query is missing or invalid.</errorstring>
<errorcode xmlns="http://schemas.microsoft.com/sharepoint/soap/">0x82000000</errorcode>
</detail>
</soap:Fault>
</soap:Body>
The key to that error is: Element <Query> of parameter query is missing or invalid.
So I see that it is being encoded, so I decided to capture the actual Webservice request with Fiddler:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<query>
<Query>
<Where>
<Gt>
<FieldRef Name="Modified" />
<Value Type="DateTime">2011-03-01</Value>
</Gt>
</Where>
</Query>
</query>
<listName>{DD3DE881-1F9D-4016-AD73-F7E1D9340880}</listName>
</GetListItems>
</soap:Body>
</soap:Envelope>
So now that we know that somehow the XML parameter of "query" is being encoded. How do I tell the SSRS designer that for this XML datasource's dataset query, I do not wish to encode that parameter? I have searched all day today and came up with
very little. I found a few posts with a simliar question, but no solution was ever mentioned.
The closest to a likely solution was this Post :
http://social.msdn.microsoft.com/Forums/en-US/sqlreportingservices/thread/8a9ba2fc-26cd-423e-bbbf-a16b5c9722f5/
in particular this phrase interested me:
"Query parameters of type Msxml2.DOMDocument30 are passed as XML. Parameters of type String which happen to contain XML are passed as strings and are XML encoded in the SOAP message. The function CXml(String) converts a string
into an Msxml2.DOMDocument30 and can be used in query parameter expressions."
Similar to the poster of that question, I also cannot find a way to define the parameter as an XML type or the use of this mysterious CXML() function in the expression builder...
I'm looking for a Microsoft resource to tell me whats going on here, but if anyone else has a workaround or an idea, I would be happy to try it out.
Regards,
-Ryan, Solution Architect
Hi Ryan,
Thanks for your question, from your statement, it seems that you want to give a default value for the parameter named query, right? If so I would recommend you achieve this requirement in report level, please follow these:
1. Create a parameter named Date, select Date/Time as data type.
2. Move to Default values tab, then click Add button ->type in =DateAdd("d",-7,Now()) as defult value's expression.
3. Right-cilck the dataset, and then select DataSet properties.
4. Move to Filters tab, click add button to add a filter.
5. In the drop-down list of Expression, select Modified datefield with Date/Time datatype.
6. Type in =Parameters!Date.Value in value's textbox.
Similar thread, please get a reference from this
http://social.technet.microsoft.com/Forums/en-US/sqlreportingservices/thread/24d30b00-139e-4487-9fb1-02f460b432f9
If you have any question, please feel free to ask.
Thanks,
Challen Fu
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
Similar Messages
-
Hi, when I go to "select files to send" and click on "sent files" I get: "Internal Server Error (500) Your request could not be completed due to an internal server error". This never happened b4. I tried rebooting and that didn't work. Any help would be appreciated. Thanks.
Hi ,
Thank you for your question.
This error was caused by the incorrect site binding, I will give a reference of my test Lab. We add two A records in DNS which the FQDN of CAS and Mailbox could resolve IP address.;
Default Web Site:
Exchange Back End:
Then IIS must be restarted.
If there are any questions regarding this issue, please be free to let me know.
Best Regard,
Jim -
Still getting this Internal error: 400 bad request. (115000).
I am still getting this Internal error: 400 bad request. (115000). I read that it was supposed to be fixed in Muse 3. I am using forms with long labels. Please help.
Thanks.
Bill MurphyThanks but his is how I solved my issue. I added a link in the Label in its own text box to look like a button. This is because I could not add a link in a label omits own. This is a nice solution because the linked info is opened in its own page so when the use closes that page there form is not lost and they can continue to the next form field. A work around that made my project look better.
If you can tell me how to add a close button or link on the info pages that would help so the user can see it right off and not have to use the browser to close the newly opened window.
Thanks for getting back to me. I would send you the muse file to test but I copied over it making this new version.
Bill Murphy
(647) 966-9325
[email protected]
www.purplealien.net
Communication is everything; without it we have nothing. -
VB6 & XML Datasource using Native XML Driver
We used to use reports that used ADO XML dataset, and in VB 6 we easily told the report which XML file to use by:
Dim objCRReport As CRAXDRT.Report
Set objCRReport = objCRApplication.OpenReport(App.path & "\crystal\" + rptName)
objCRReport.DiscardSavedData
objCRReport.Database.Tables.Item(1).Location = xmlFile
where xmlFile was the fully qualified path to the xml data to pass to the report.
Now we are trying to do this with a new report which uses a XML Native driver as its connection method. In VB6, how can we pass different xml files to use?
We looked at objCRReport.Database.SetDataSource, but it expects some parameters that I don't understand ( data , { data type } , { table number } )
Is there an example anywhere of how to switch your datasource in code while using the XML Native Driver?See [this|https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.km.cm.docs/oss_notes/sdn_oss_boj_erq/sap(bD1lbiZjPTAwMQ==)/bc/bsp/spn/scn_bosap/notes.do] note.
I would also recommend that you read the following regarding distribution of the runtime. This is important as the xml driver (crdb_xml.dll) uses Java:
Apart from the regular deployment procedure for COM/RDC/NET applications, you have to follow the additional below-given steps in the client machines.
Install the Java (JVM) 2 Runtime Environment (this is essentially the Java Framework needed to launch the crdb_xml native driver 1.4.2 from the java sun web site at:
http://java.sun.com/j2se/1.4.2/download.html.
Create a java folder inside the " C:Program FilesBusiness ObjectsCommon3.0";.
Copy over the Crconfig.xml(C:Program FilesCommon FilesBusiness Objects3.0java) file from the development machine to the deployed machine in at the following path "C:Program FilesCommon FilesBusiness Objects3.0java" path. Open the crconfig.xml ; this file in Notepad and search for the line <JavaDir>. If JRE is installed to C:Program FilesJavaj2re1.4.2_12 in then the value should be look like this <JavaDir> C:Program FilesJavaj2re1.4.2_12 in</JavaDir>.
Create a folder called lib in the "C:Program FilesCommon FilesBusiness Objects3.0java".
Copy over the entire contents of the lib folder (especially the external folder) from the development machine to the newly created lib machine on the deployed machine. The point of this is to ensure that the crconfig.xml file contains all the files here which exist at the correct path which they now should because we copied over the lib and external directories.
Copy crdb_xml.dll, crdb_xml_res_en, and all the files with "crdb_xml_res_xx from your development machine to the deployment machine (C:Program FilesCommon FilesBusiness Objects3.0 in).
Restart your machine and try accessing your web application. The reports will show up the data without any issue.
The above is written for CR XI release 1. You may have to adjust the path given above as you do not specify the version of Crystal reports you are using.
Ludek -
Getting Bad Type Error when calling a method in the proxy class
Hi,
I have generated the proxy classes from wsdl.
When I am calling the methods in the proxy class from one of external class, I am getting following error.
Can anyone please help me in resolving this issue.
javax.xml.ws.soap.SOAPFaultException: org.xml.sax.SAXException: Bad types (interface javax.xml.soap.SOAPElement -> class com.intraware.snetmgr.webservice.data.SubscribeNetObjectReference) Message being parsed:
at com.sun.xml.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:197)
at com.sun.xml.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:122)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:125)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:95)
at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:136)
at $Proxy176.find(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at weblogic.wsee.jaxws.spi.ClientInstanceInvocationHandler.invoke(ClientInstanceInvocationHandler.java:84)
at $Proxy173.find(Unknown Source)
at com.xxx.fs.FNServices.findAccountWs(FNServices.java:132)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at weblogic.wsee.jaxws.WLSInstanceResolver$WLSInvoker.invoke(WLSInstanceResolver.java:92)
at weblogic.wsee.jaxws.WLSInstanceResolver$WLSInvoker.invoke(WLSInstanceResolver.java:74)
at com.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:151)
at com.sun.xml.ws.server.sei.EndpointMethodHandlerImpl.invoke(EndpointMethodHandlerImpl.java:268)
at com.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:100)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:866)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:815)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:778)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:680)
at com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:403)
at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:532)
at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:253)
at com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:140)
at weblogic.wsee.jaxws.WLSServletAdapter.handle(WLSServletAdapter.java:171)
at weblogic.wsee.jaxws.HttpServletAdapter$AuthorizedInvoke.run(HttpServletAdapter.java:708)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:146)
at weblogic.wsee.util.ServerSecurityHelper.authenticatedInvoke(ServerSecurityHelper.java:103)
at weblogic.wsee.jaxws.HttpServletAdapter$3.run(HttpServletAdapter.java:311)
at weblogic.wsee.jaxws.HttpServletAdapter.post(HttpServletAdapter.java:336)
at weblogic.wsee.jaxws.JAXWSServlet.doRequest(JAXWSServlet.java:95)
at weblogic.servlet.http.AbstractAsyncServlet.service(AbstractAsyncServlet.java:99)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:111)
at java.security.AccessController.doPrivileged(Native Method)
at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:313)
at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:413)
at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:94)
at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:161)
at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:71)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:136)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3715)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3681)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2277)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2183)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1454)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:178)
Thanks
AnoopHi Vlad,
The service has not been changed since i have generated the proxy.
I tried calling the service from soapUI and I am getting the following error now.
Request:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:uri="uri:webservice.subscribenet.intraware.com" xmlns:uri1="uri:subscribenet.intraware.com">
<soapenv:Header>
<uri:SessionHeader>
<uri:SessionID>hjkashd9sd90809dskjkds090dsj</uri:SessionID>
</uri:SessionHeader>
</soapenv:Header>
<soapenv:Body>
<uri:Find>
<uri:SubscribeNetObjectReference>
<uri1:ID></uri1:ID>
<uri1:IntrawareID></uri1:IntrawareID>
<uri1:SharePartnerID></uri1:SharePartnerID>
</uri:SubscribeNetObjectReference>
</uri:Find>
</soapenv:Body>
</soapenv:Envelope>
Response:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header/>
<soapenv:Body>
<soapenv:Fault>
<faultcode>soapenv:Server.generalException</faultcode>
<faultstring>org.xml.sax.SAXException: WSWS3279E: Error: Unable to create JavaBean of type com.intraware.snetmgr.webservice.data.SubscribeNetObjectReference. Missing default constructor? Error was: java.lang.InstantiationException: com.intraware.snetmgr.webservice.data.SubscribeNetObjectReference. Message being parsed:</faultstring>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>
Thanks
Anoop -
Getting an ntvdm error while using single sign-on
HI!
When I run GssExample from the tutorial, I get an ntvdm error in a requester, saying "Error while setting up environment for the application. Choose 'Close' to terminate the application.".
Then I can klick on "Close" or "Ignore". Either way, it takes some seconds and then GssExample is working as expected. But this requester is of course annoying. I get it every time I start GssExample.
This only happens with single sign-on (useTicketCache=true).
Using JDK 1.4.0 on Windows 2000 SP2.
Any ideas?
Thanks!
Regards,
ThomasOK.. the error goes away when using jdk1.4.1 but still the system is unable to get the user credentials from the cache :-(
-
How to pass XML tags in a soapbody parameter having datatype as string?
Hi,
I need to pass XML tags as a String parameter in SOAP:Body.
When I tried send SOAP Request, The SOAP Request was changing < to <
and > to > respectively. Is there any way to ensure that the XML tags (< and >) remain as it is without getting changed.
I also tried to retrieve XML file and stored in a StringBuffer and tried to send SOAP Request but i am still receiving the < and > tags in my SOAP Request.
Pl suggest some alternatives to avoid storing the XML in the form of string and instead directly store the XML into a XML Node so that i can avoid the above condition
Thanks in advance,
gnsinhydHi,
The sample code I used is as follows:
package somepackage;
import javax.mail.internet
import javax.xml.messaging.*;
import javax.xml.soap.*;
import javax.xml.transform.*;
import javax.activation.*;
public class SomeClassName{
// Some namespace declarations
public static void main(String[] args) throws someExceptions{
try
// Create the connection
SOAPConnectionFactory connectionFactory = SOAPConnectionFactory.newInstance();
SOAPConnection connection = connectionFactory.createConnection();
// create a new SOAP message using SAAJ API�s
MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage request = messageFactory.createMessage();
// Create a SoapAction header
MimeHeaders headers = request.getMimeHeaders();
headers.addHeader("SOAPAction", "soapaction url");
// Object for SOAP Message parts
SOAPPart part = request.getSOAPPart();
SOAPEnvelope envelope = part.getEnvelope();
envelope.addNamespaceDeclaration("xsd","http://www.w3.org/2001/XMLSchema");
envelope.addNamespaceDeclaration("xsi","http://www.w3.org/2001/XMLSchema-instance");
//envelope.addNamespaceDeclaration("enc","http://schemas.xmlsoap.org/soap/encoding/");
envelope.addNamespaceDeclaration("soap","http://schemas.xmlsoap.org/soap/envelop/");
//envelope.setEncodingStyle("http://schemas.xmlsoap.org/soap/encoding/");
SOAPBody body = envelope.getBody();
SOAPHeader header = envelope.getHeader();
// Now, build the ClaimStorage element in the body for our request
Name somename = envelope.createName("somename");
// � and configure it with the specifics of our request
SOAPElement ClaimStorage = body.addTextNode("somename");
ClaimStorage.addNamespaceDeclaration("xmlns","url");
ClaimStorage.addChildElement(somename).addTextNode("somename");
ClaimStorage.addChildElement(xmlclaim).addTextNode("<XMLTAGS">); <---THE PROBLEM IS HERE
----> THE XML TAGS < > ARE CHANGING TO < AND > MOST PROBABLY DUE TO POST I THINK.
// Save Message
request.saveChanges();
// View SOAP Request
System.out.println("\n Soap Request:\n");
request.writeTo(System.out);
System.out.println();
// Now, create a connection to the HTTP SOAP endpoint
URLEndpoint endpoint = new URLEndpoint("url.asmx");
// Send request, view response. In a real program, we�d process the response envelope programmatically to see if there was a fault, etc.
System.out.println("request =\n" + request);
SOAPMessage response = connection.call(request, endpoint);
// View the output
System.out.println("\nXML Response\n");
// Create Transformer
TransformerFactory tff = TransformerFactory.newInstance();
Transformer tf = tff.newTransformer();
// Get reply content
Source sc = response.getSOAPPart().getContent();
System.out.println("SOAP Body" + response.getSOAPBody());
// Set output transformation
StreamResult result = new StreamResult(System.out);
tf.transform(sc, result);
System.out.println();
// Close connection
connection.close();
System.out.println("\nResponse =\n" + response);
catch (Exception e)
e.printStackTrace();
Pl. reply as soon as possible
Thanks in advance -
Issue with parameter passing in ie7 to php xml
Hi
I wondered if anyone could offer a little advice what the issue is here.
I have a page with xml generated from php in a separte file and presented by a dataset in spry.
The xml is OK and in firefox it all works but ie seems to barf on it.
The situation is this:
I have a jump menu on a front page that provides a url with anumeric parameter passed like this
platforms.php?platform_id=1
This parameter is picked up by php on the platforms.php page using the $_GET Array and is passed into the code in my Spry dataset to the file that runs my query and returns my xml- so basically the page displays a dataset filtered on this parameter id.
It works perfectly in FF.
In IE if I link straight to the page without a parameter at all- so platforms.php the page loads OK using the default parameter I have set up in the top of this page to send the default id of 1 to the code page so the spry query says platform_sql.php?platform_id=1 and the xml generator is fine with thisiel. ie I do a
if(isset($_GET['platform_id'])){
$platform=$_GET['platform_id'];
}else{
$platform=1;
The dataset loads Ok in IE but when I pass a parameter in the url from my jump menu IE gives a blank SPRY table i- it momentarily appears with just the placeholders for my dataset elements then vanishes. The source code of the page shows the correct id was set in the spry data going to my query file.
There is an error in ie saying there is a javascript error but its not any help- in ie fashion- FF shown no such errors.
I thought this might be a data type thing again in the dataset but its not - I have set the elements returned to simple strings but it still does not work.
Is there a problem passing in a parameter like this to a spry dataset?After about half a day of mucking round I found the problem and a solution to this problem.
What appeared to have happened was that some of the older content in my database used html originally encoded using a WYSWYG editor called ktml.
Later data uses Tiny MCE. It looks like the character set of the two formats is slightly different and as a result some characters rendered incorrectly when passed through XML parsing where it specifies the character set as utf-8.
Firefox on the whole seems to ignore the issue though looking at the raw xml output of my php-xml code- where "-" characters were (dashes) there was a question mark character shown. None the less in actual use on my page the xml was produced and the dataset worked out.
In IE, it barfed at these same characters and failed to return the xml dataset.
What confused the issue more was some of my smaller datasets if they by chance never had a "-" character in rendered OK in IE- hence my default dataset (platform_id=1) worked in IE. After much experimenting I noticed other ids worked too if there was never such a character.
How I got round it was to wrap my server side data in the utf8_encode() function, and now all my xml is clean.
The javascript error being thrown was a red herring though I could not tell until I managed to run my page in ie7 with Visual Studio Express error console running- I had this on a spare machine at work so could debug with it.
All sorted now- now just need to find away to wrap all my datasets in collapsible panels that work.
K -
How to get and parse xml input parameter?
Hi,
If one transaction input parameter is xml string, like as below.
<a>
<b>
<c>1</c>
<d>2</d>
</b>
<b>
<c>3</c>
<d>4</d>
</b>
</a>
If I would like to get each element (maybe by repeater action), how to do that?
Thanks!Hi,
You must convert the string into xml with necessary action block. (XML Functions --> String to XML Parser)
Then you must put a repeater after converter action and you must set Xpath expression for repeater (configuration) like below:
String_To_XML_Parser_0.Output{/ARef/BRef}
after repeater you can use values like below:
Repeater.Output{/BRef/c}
Repeater.Output{/BRef/d}
Regards. -
Passing file location as URL parameter for xml query
Hi all,
A quick question regarding using a parameter to set the source URL in an XML query template.
When assigning the URL, the static text works perfectly eg:
//<servername>/<folder>/samplefile.xml . The xml is returned as required.
However, we wish to call this from a BLS txn and set the source URL dynamically.
To test this we assigned //<servername>/<folder>/samplefile.xml to Parameter no 1 and insert [Param.1] in the source URL field. No luck.
Any suggestions?
Cheers
MarkMark,
In BLS, the double slashes (escaping the single /) are only necessary if you are building the full http url string in the link editor.
If your XMLQuery template is something like http://localhost/Folder/Subfolder/[Param.1] then put in a default param value in the query template and make sure the query test works. Then configure (or reconfigure) this in your BLS transaction and generate the sample results. All you should have to do in BLS then is to assign your Transaction or Local property to the Param.1 link in your XMLQuery action block. All of the dynamic replacement and subsequent xml file retrieval should then be done by the XMLQuery itself.
If you can keep the majority of the URL in the XMLQuery itself and then just dynamically pass it the Param.1 piece it will be very easy to test and configure (also use localhost if the file lives on the xMII web server), but if you have to build the string external in BLS I would recommend using a combination of the expression editor and a Local property. If the Local string property contains the base of http://localhost/Folder/Subfolder/ (no quotes or character escaping needed for the default value of a string property) then just assign something like the following to your Param.1 property of the XMLQuery: Local.URLBase & "filename.xml" (a simple evaluate will confirm your efforts).
Regards,
Jeremy -
Here's how to pass XML as a parameter to an Oracle stored proc
This, or something like it, should be all over the web and I intend to do so.
The first sample has exactly what you need in order to pass "XML" as a parm to a stored proc.
http://www.oracle-base.com/forums/viewtopic.php?f=2&t=8468> Really, what is the difference between the 2?
"What is a...?" questions are easily answered by Google. Generally speaking, however, "JavaScript" is Netscape's implementation of ECMAScript, a scripting language primarily for client-side development for a web browser. "Java" is an entire platform, but typically refers to an object-oriented programming language that is typically compiled to bytecode and run in a virtual machine.
They're not the same thing at all.
~ -
Trying to pass xml data to a web service
I'm working on an Apex application that is required to pass data to a web service for loading into another (non Oracle) system. The web service expects two stings as input, the first string is simply an ID, the second string is an xml document. I generate an xml 'string' using PL/SQL in an on-submit process prior to invoking the web service. If I pass regular text for the second parameter, the web service returns an error message which is stored in the response collection and displayed on the page as expected. When I pass the the xml data, I get a no data found error and the response collection is empty. I have tried this in our development environment on Apex 3.1.2 (database version 10.2). I also tried this on our Apex 4.0.2 sandbox (with the same Oracle 10.2 database). I have found that once I have nested xml, I get the no data found message, if I pass partial xml data, I get the error response from the web service. Perhaps I am not generating the xml correctly to pass to the web service (this only just occurred to me as I write this)? Or is there an issue passing xml data from Apex to the web service? Any help will be greatly appreciated! here is the code I use to generate the xml string:
declare
cursor build_data is
select u_catt_request_buid,u_catt_request_name,u_catt_cassette_buid,u_catt_cassette_name
,u_project_name,u_sub_project,replace(u_nominator,'ERROR ','') u_nominator
,replace(replace(u_going_to_vqc,'Yes','true'),'No','false') u_going_to_vqc
,u_promoter,u_cds,u_terminator
,u_primary_trait,u_source_mat_prvd,u_pro_resistance_1,u_vector_type
,nvl(u_my_priority,'Medium') u_my_priority
,replace(replace(u_immediate_trafo,'Yes','true'),'No','false') u_immediate_trafo
,replace(replace(u_new_bps_cmpnt,'Yes','true'),'No','false') u_new_bps_cmpnt
,u_compnt_name,u_new_cmpt_desc,initcap(u_target_crop) u_target_crop,u_corn_line
,u_plant_selection,u_num_of_ind_events,u_num_plants_per_event,u_molecular_quality_events
,replace(replace(u_field,'Yes','true'),'No','false') u_field
,u_t1_seed_request,u_potential_phenotype,u_submission_date
,u_sequence_length,u_trait,u_frst_parent,u_frst_parent_vshare_id,u_cds_vshare_id
,constructid,cassetteid,description
from temp_constructs_lims
order by constructid,description;
v_xml_info varchar2(350);
v_xml_header varchar2(1000);
v_xml_data clob;
v_xml_footer varchar2(50);
v_create_date varchar2(10);
v_scientist_name v_users.full_name%type;
v_scientist_email v_users.email_address%type;
v_primas_code construct.fkprimas%type;
v_nominator_name v_nominators.full_name%type;
v_file_length number;
begin
-- initialize variables
v_create_date := to_char(sysdate,'YYYY-MM-DD');
v_xml_data := null;
-- get name and email address
begin
select full_name,email_address
into v_scientist_name,v_scientist_email
from v_users
where ldap_account = :F140_USER_ID;
exception when no_data_found then
v_scientist_name := '';
v_scientist_email := '';
v_scientist_name := 'Test, Christine';
v_scientist_email := '[email protected]';
end;
-- set up xml file
if :OWNER like '%DEV%' then
v_xml_info := '
<?xml version="1.0" encoding="utf-8"?>
<exchange xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="deService"
xsi:schemaLocation="deService http://mycompany.com/webservices/apexdataexchange/schemas/RTPCATT.xsd">
else
v_xml_info := '
<?xml version="1.0" encoding="utf-8"?>
<exchange xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="deService"
xsi:schemaLocation="deService http://mycompanyprod.com/webservices/apexdataexchange/schemas/RTPCATT.xsd">
end if;
-- populate xml header records
v_xml_header := '<header xmlns="">
<stdXmlVer>2.0</stdXmlVer>
<sendingUnit>'||:P36_UNIT_NUMBER||'</sendingUnit>
<sendingPerson>'||v_scientist_name||'</sendingPerson>
<notification>'||v_scientist_email||'</notification>
<creationDate>'||v_create_date||'</creationDate>
</header>
<entities xmlns="">
for rec in build_data loop
begin
-- get primas code for current construct
select fkprimas
into v_primas_code
from construct
where constructid = rec.constructid;
exception when no_data_found then
v_primas_code := null;
end;
begin
-- get nominator name for current construct
select full_name
into v_nominator_name
from v_nominators
where nominator_id = rec.u_nominator;
exception
when no_data_found then
v_nominator_name := null;
when invalid_number then
v_nominator_name := catt_pkg.full_name_from_user_id(p_user_id => rec.u_nominator);
v_nominator_name := 'Test, Christine';
end;
v_xml_data := v_xml_data||'
<Construct>
<requestBUID>'||rec.u_catt_request_buid||'</requestBUID>
<requestName>'||rec.u_catt_request_name||'</requestName>
<cassetteBUID>'||rec.u_catt_cassette_buid||'</cassetteBUID>
<cassetteName>'||rec.u_catt_cassette_name||'</cassetteName>
<scientist>'||v_scientist_name||'</scientist>
<projectNumber>'||v_primas_code||'</projectNumber>
<subProject>'||rec.u_sub_project||'</subProject>
<comments>'||rec.description||'</comments>
<nominator>'||v_nominator_name||'</nominator>
<goingToVqc>'||rec.u_going_to_vqc||'</goingToVqc>
<primaryTrait>'||rec.u_primary_trait||'</primaryTrait>
<sourceMatPrvd>'||rec.u_source_mat_prvd||'</sourceMatPrvd>
<prokaryoticResistance>'||rec.u_pro_resistance_1||'</prokaryoticResistance>
<vectorType>'||rec.u_vector_type||'</vectorType>
<priority>'||rec.u_my_priority||'</priority>
<immediateTrafo>'||rec.u_immediate_trafo||'</immediateTrafo>
<newComponent>'||rec.u_new_bps_cmpnt||'</newComponent>
<componentName>'||rec.u_compnt_name||'</componentName>
<newComponentDescription>'||rec.u_new_cmpt_desc||'</newComponentDescription>
<targetCrop>'||rec.u_target_crop||'</targetCrop>
<Line>'||rec.u_corn_line||'</Line>
<plantSelection>'||rec.u_plant_selection||'</plantSelection>
<numOfIndEvents>'||rec.u_num_of_ind_events||'</numOfIndEvents>
<numOfPlantsPerEvent>'||rec.u_num_plants_per_event||'</numOfPlantsPerEvent>
<molecularQualityEvents>'||rec.u_molecular_quality_events||'</molecularQualityEvents>
<toField>'||rec.u_field||'</toField>
<potentialPhenotype>'||rec.u_potential_phenotype||'</potentialPhenotype>
</Construct>
end loop;
-- complete xml data
v_xml_footer := '
</entities>
</exchange>
-- complete submission data
:P36_XML_SUBMISSION := null;
:P36_XML_SUBMISSION := v_xml_info||v_xml_header||v_xml_data||v_xml_footer;
:P36_XML_SUBMISSION := trim(:P36_XML_SUBMISSION);
end;Here is an example of :P36_XML_SUBMISSION:
<?xml version="1.0" encoding="utf-8"?> <exchange xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="deService" xsi:schemaLocation="deService http://mycompany.com/webservices/apexdataexchange/schemas/RTPCATT.xsd"> <header xmlns=""> <stdXmlVer>2.0</stdXmlVer> <sendingUnit>10</sendingUnit> <sendingPerson>Test, Christine</sendingPerson> <notification>[email protected]</notification> <creationDate>2011-12-20</creationDate> </header> <entities xmlns=""> <Construct> <requestBUID>150000123</requestBUID> <requestName>AA0000123</requestName> <cassetteBUID>160000123</cassetteBUID> <cassetteName>AB000123</cassetteName> <scientist>Test, Christine</scientist> <projectNumber>T000123</projectNumber> <subProject>Discovery Plus</subProject> <comments>AA0000123 From CATT on 20-DEC-11 </comments> <nominator>Test, Christine</nominator> <goingToVqc>true</goingToVqc> <primaryTrait>promoter::intron::transit:gene::terminator</primaryTrait> <sourceMatPrvd>seed - stuff</sourceMatPrvd> <prokaryoticResistance></prokaryoticResistance> <vectorType>Plant Vector</vectorType> <priority>Medium</priority> <immediateTrafo>true</immediateTrafo> <newComponent></newComponent> <componentName>gene</componentName> <newComponentDescription>unknown function; sequence has some similarity to others</newComponentDescription> <targetCrop>Crop</targetCrop> <Line>Inbred</Line> <plantSelection>smidge ver2</plantSelection> <numOfIndEvents>6</numOfIndEvents> <numOfPlantsPerEvent>1</numOfPlantsPerEvent> <molecularQualityEvents>NA</molecularQualityEvents> <toField>true</toField> <potentialPhenotype></potentialPhenotype> </Construct> </entities> </exchange>My application page is accessed by an action from another page. The user reviews the data in a sql report region. When the use clicks on the Upload (SUBMIT) button, the xml string is generated first and then the web service is invoked. I have tried passing a simple string as the second parameter ("dummydata") and partial data in the xml string ("<sendingPerson>Test, Christine</sendingPerson>") the web service returns this error in both cases:
Error[Validate Data]: (XML) = Data at the root level is invalid. Line 1, position 1.. Cannot validate the XML! Data Exchange not accepted!Once I pass the entire xml string above, I get an Oracle-01403: no data found error. I have opened the web service in IE and pasted my xml input string and received a valid, verified result, so I am sure that the generated xml is correct. I have spoken with the web service developer; there are no log entries created by the web service when I submit the full xml string, so I suspect the failure is in the Apex application.
Thanks,
Christine
I should add that once I have nested tags in the xml, I get the Oracle no data found error ("<header xmlns=""> <stdXmlVer>2.0</stdXmlVer> <sendingUnit>10</sendingUnit> </header>"). I f I do not have nested tags in the xml ("<notification>[email protected]</notification> <creationDate>2011-12-20</creationDate>"), I get the web service response (error).
Edited by: ChristineD on Dec 20, 2011 9:54 AMOk, I think I'm getting closer to thinking this all the way through. When I have used clobs in the past, I've always used the DBMS_CLOB package. I use this to create a temp clob and then make the above calls. I had to go find an example in my own code to remember all of this. So, here is another suggestion... feel free to disregard all the previous code snippets..
declare
cursor build_data is
select u_catt_request_buid,u_catt_request_name,u_catt_cassette_buid,u_catt_cassette_name
,u_project_name,u_sub_project,replace(u_nominator,'ERROR ','') u_nominator
,replace(replace(u_going_to_vqc,'Yes','true'),'No','false') u_going_to_vqc
,u_promoter,u_cds,u_terminator
,u_primary_trait,u_source_mat_prvd,u_pro_resistance_1,u_vector_type
,nvl(u_my_priority,'Medium') u_my_priority
,replace(replace(u_immediate_trafo,'Yes','true'),'No','false') u_immediate_trafo
,replace(replace(u_new_bps_cmpnt,'Yes','true'),'No','false') u_new_bps_cmpnt
,u_compnt_name,u_new_cmpt_desc,initcap(u_target_crop) u_target_crop,u_corn_line
,u_plant_selection,u_num_of_ind_events,u_num_plants_per_event,u_molecular_quality_events
,replace(replace(u_field,'Yes','true'),'No','false') u_field
,u_t1_seed_request,u_potential_phenotype,u_submission_date
,u_sequence_length,u_trait,u_frst_parent,u_frst_parent_vshare_id,u_cds_vshare_id
,constructid,cassetteid,description
from temp_constructs_lims
order by constructid,description;
v_xml_info varchar2(350);
v_xml_header varchar2(1000);
v_xml_data clob;
v_xml_footer varchar2(50);
v_create_date varchar2(10);
v_scientist_name v_users.full_name%type;
v_scientist_email v_users.email_address%type;
v_primas_code construct.fkprimas%type;
v_nominator_name v_nominators.full_name%type;
v_file_length number;
v_xml_body varchar2(32767); --added by AustinJ
v_page_item varchar2(32767); --added by AustinJ
begin
-- initialize variables
v_create_date := to_char(sysdate,'YYYY-MM-DD');
--v_xml_data := null; --commented out by AustinJ
dbms_lob.createtemporary( v_xml_data, FALSE, dbms_lob.session ); --added by AustinJ
dbms_lob.open( v_xml_data, dbms_lob.lob_readwrite ); --added by AustinJ
-- get name and email address
begin
select full_name,email_address
into v_scientist_name,v_scientist_email
from v_users
where ldap_account = :F140_USER_ID;
exception when no_data_found then
v_scientist_name := '';
v_scientist_email := '';
v_scientist_name := 'Test, Christine';
v_scientist_email := '[email protected]';
end;
-- set up xml file
if :OWNER like '%DEV%' then
v_xml_info := '
<?xml version="1.0" encoding="utf-8"?>
<exchange xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="deService"
xsi:schemaLocation="deService http://mycompany.com/webservices/apexdataexchange/schemas/RTPCATT.xsd">
else
v_xml_info := '
<?xml version="1.0" encoding="utf-8"?>
<exchange xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="deService"
xsi:schemaLocation="deService http://mycompanyprod.com/webservices/apexdataexchange/schemas/RTPCATT.xsd">
end if;
-- populate xml header records
v_xml_header := '<header xmlns="">
<stdXmlVer>2.0</stdXmlVer>
<sendingUnit>'||:P36_UNIT_NUMBER||'</sendingUnit>
<sendingPerson>'||v_scientist_name||'</sendingPerson>
<notification>'||v_scientist_email||'</notification>
<creationDate>'||v_create_date||'</creationDate>
</header>
<entities xmlns="">
for rec in build_data loop
begin
-- get primas code for current construct
select fkprimas
into v_primas_code
from construct
where constructid = rec.constructid;
exception when no_data_found then
v_primas_code := null;
end;
begin
-- get nominator name for current construct
select full_name
into v_nominator_name
from v_nominators
where nominator_id = rec.u_nominator;
exception
when no_data_found then
v_nominator_name := null;
when invalid_number then
v_nominator_name := catt_pkg.full_name_from_user_id(p_user_id => rec.u_nominator);
v_nominator_name := 'Test, Christine';
end;
v_xml_body := '
<Construct>
<requestBUID>'||rec.u_catt_request_buid||'</requestBUID>
<requestName>'||rec.u_catt_request_name||'</requestName>
<cassetteBUID>'||rec.u_catt_cassette_buid||'</cassetteBUID>
<cassetteName>'||rec.u_catt_cassette_name||'</cassetteName>
<scientist>'||v_scientist_name||'</scientist>
<projectNumber>'||v_primas_code||'</projectNumber>
<subProject>'||rec.u_sub_project||'</subProject>
<comments>'||rec.description||'</comments>
<nominator>'||v_nominator_name||'</nominator>
<goingToVqc>'||rec.u_going_to_vqc||'</goingToVqc>
<primaryTrait>'||rec.u_primary_trait||'</primaryTrait>
<sourceMatPrvd>'||rec.u_source_mat_prvd||'</sourceMatPrvd>
<prokaryoticResistance>'||rec.u_pro_resistance_1||'</prokaryoticResistance>
<vectorType>'||rec.u_vector_type||'</vectorType>
<priority>'||rec.u_my_priority||'</priority>
<immediateTrafo>'||rec.u_immediate_trafo||'</immediateTrafo>
<newComponent>'||rec.u_new_bps_cmpnt||'</newComponent>
<componentName>'||rec.u_compnt_name||'</componentName>
<newComponentDescription>'||rec.u_new_cmpt_desc||'</newComponentDescription>
<targetCrop>'||rec.u_target_crop||'</targetCrop>
<Line>'||rec.u_corn_line||'</Line>
<plantSelection>'||rec.u_plant_selection||'</plantSelection>
<numOfIndEvents>'||rec.u_num_of_ind_events||'</numOfIndEvents>
<numOfPlantsPerEvent>'||rec.u_num_plants_per_event||'</numOfPlantsPerEvent>
<molecularQualityEvents>'||rec.u_molecular_quality_events||'</molecularQualityEvents>
<toField>'||rec.u_field||'</toField>
<potentialPhenotype>'||rec.u_potential_phenotype||'</potentialPhenotype>
</Construct>
'; --modified by AustinJ
dbms_lob.writeappend( v_xml_data, length(v_xml_body), v_xml_body); --added by AustinJ
end loop;
-- complete xml data
v_xml_footer := '
</entities>
</exchange>
-- complete submission data
v_page_item := null;
v_page_item := v_xml_info||v_xml_header||wwv_flow.do_substitutions(wwv_flow_utilities.clob_to_varchar2(v_xml_data))||v_xml_footer; --added by AustinJ
:P36_XML_SUBMISSION := trim(v_page_item); --added by AustinJ
dbms_lob.close( v_xml_data); --added by AustinJ
if v_xml_data is not null then
dbms_lob.freetemporary(v_xml_data); --added by AustinJ
end if; --added by AustinJ
end;This code will use the Database to construct your clob and then convert it back to a varchar2 for output to your webservice. This makes more sense to me now and hopefully you can follow what the process is doing.
You don't technically need the two varchar2(36767) variables. I used two for naming convention clarity sake. You could use just one multipurpose variable instead.
If you have any questions, just ask. I'll help if I can.
Austin
Edited by: AustinJ on Dec 20, 2011 12:17 PM
Fixed spelling mistakes. -
Does XML approach for passing parameters in the query make the query slow?
Hi,
I am using XML approach for passing parameters in a query. This is running very slow but when I pass comma separated values in parameter, it runs very fast.
So it concludes that we should not use XML approach for passing parameters. Please confirm me that Am I right or wrong?
I have also googled to clear my doubt but not get solution till now. please help me.
Regards,
Sachin914014 wrote:
Hi,
I am using XML approach for passing parameters in a query. This is running very slow but when I pass comma separated values in parameter, it runs very fast.
So it concludes that we should not use XML approach for passing parameters. Please confirm me that Am I right or wrong?
I have also googled to clear my doubt but not get solution till now. please help me.
Regards,
SachinShow us what you are doing, create a simple yet complete example we can run on our Oracle instances.
Then we will know exactly what you mean, and can comment appropriately.
Cheers, -
Stored Procedure with Input & output parameter as XML
Hi
I have a requirement wherein i need to have a stored procedure with accepts huge XML from Java and the SP has to process all the records in the XML and return XML output with some messages in it.
Currenty, I have a stored procedure to process the xml stored in Oracle Database.
I am using the following SQL statement to read the data from the XML column.
select xmltest1.id,xmltest1.name
from xmltest,
XMLTABLE(
XMLNamespaces(default 'syncpsna/schemas'),
'/XMLTestRequest/insert/row'
PASSING xmltest.data_xml
COLUMNS
"ID" number(10) PATH 'id',
"NAME" varchar2(50) PATH 'name') xmltest1
where xmltest.id = 2;I want to execute similary queries to fetch data from the XML Passed as an input parameter from JAVA.
if i could get some examples of reading the XML and sending the xml back to the calling program.
RegardsHi,
if i could get some examples of reading the XML and sending the xml back to the calling program.What kind of process do you want to perform on the input XML?
You said "reading", but for what purpose? Storing data in the database, or just transform the XML into another form?
Anyway, you'll probably need a function, something like :
create or replace function processXML (inputXML in xmltype)
return xmltype
is
outputXML xmltype;
begin
-- process inputXML here, and construct outputXML
return outputXML;
end;Back in Java, you can use the oracle.xdb.XMLType class to map the XMLType SQL datatype to a Java object and manipulate it. -
Pass XML to MII transaction via HTTPService in FLEX
Hi folks,
I have a problem with a HTTPService call of a MII transaction in Flex3. It always worked fine, when I only had to pass simple parameters like strings etc. But now I have a transaction that expects 3 String parameters (they are received) and two XML parameters. I already tried several possibilities:
1.) I put the XML data into an object in Flex and passed this object for the XML parameters - the XML is empty on MII side
2.) I change the content-type of the HTTPService to application/xml and passed the XML parameters as XML - the XML is still empty on MII side.
So my question is: Is it possible to send such a combined HTTPService call with Strings AND XML? Did anybody already do that? The XMLs have the typical MII-structure with Rowsets/Rowset/Row, but without the column-description at the beginning - could that be a point, that MII cannot deal without this column description? But I already tried to send an XML in an other structure and it was also empty on MII side.
Would be great if anybody has any suggestion!
Thanks,
Anika
EDIT: I now realized, that if I pass only one XML parameter, it works. As soon as I pass both XML parameters, it does not work and shows up a HTTP request error. Don't know why... Maybe it's limited to a certain string length in the transaction call, that is exceeded when I pass both parameters?
Edited by: Anika Delzeit on Nov 25, 2009 5:54 PMIf you think you're encountering URL length issues make sure you are using POST and not GET, although it looks like there may be additional issues: http://www.javaworld.com/community/node/2307
Maybe you are looking for
-
Jdk standalone, distributed, embedded or anything else
Hi, I have a software made in java and need to run on Windows XP, Vista and several Linux. My problem : there is too much JAVA_HOME, and PATH problems cause people how setup my software have rock'n'roll system setup. So i think about copy java.exe an
-
Hello! I have a problem with Hasee laptop with integrated graphic chip SiS 671. The main problem is that I have strange vertical stripes across the screen and the fonts aren't sharp. lspci result: 01:00.0 VGA compatybile controllerL Silicon Integrate
-
Cell to bring value and formatting both
Hi, I enter formula =sheet1'!A1 in cell A1 on sheet2. It brings value from sheet1 A1. I want it to bring value as well as formatting both. Is it possible by vba code ? if so please help. I have long list of articles. I change them frequently in seque
-
Dreamweaver freezes on design view
I am having issues with dreamweaver freezing in design view. when i click on design view, it crashes, and i have to restart. i have tried multiple installs, as well as uncheck "display external files". what else could be the issue? is there a new
-
Is it possible to sync my iWeb content between my iMac and macbookpro? Would I have to put the iWeb content on a separate hard drive and connect by firewire each time I want to do some editing? Not sure at all about how this can be done. Followed an