Reading data from RS232 PORT
Hi all
I have to capture the WEIGHT from the RS 232 PORT into SAP.
How to interface the Weigh Bridge System with ABAP thru RS232 PORT.
Thanks in advance
Sourabh
I have the same requirement, but have many different RS-232 devices to read from via serial ports. I would be interested in any solutions that anyone has come up with.
Thanks,
Bob
Similar Messages
-
Problem in reading data from serial port continuously- application hangs after sometimes
I need to read data from two COM port and order of data appearance from COM port is not fixed.
I have used small timeout and reading data in while loop continously . If my application is steady for sometime it gets hangs and afterwards it doesnt receive any data again.
Then I need to restart my application again to make it work.
I am attaching VI. Let me know any issue.
Kudos are always welcome if you got solution to some extent.
I need my difficulties because they are necessary to enjoy my success.
--Ranjeet
Attachments:
Scanning.vi 39 KBbillko wrote:
Ranjeet_Singh wrote:
I need to read data from two COM port and order of data appearance from COM port is not fixed.
I have used small timeout and reading data in while loop continously . If my application is steady for sometime it gets hangs and afterwards it doesnt receive any data again.
Then I need to restart my application again to make it work.
I am attaching VI. Let me know any issue.
What do you mean, "not fixed?" If there is no termination character, no start/stop character(s) or even a consistent data length, then how can you really be sure when the data starts and stops?
I probably misunderstood you though. Assuming the last case is not ture - there is a certain length to the data - then you should use the bytes at port, like in the otherwise disastrous serial port read example. In this case, it's NOT disastrous. You have to make sure that you read all the data that came through. Right now you have no idea how much data you just read. Also, if this is streaming data, you might want to break it out into a producer/consumer design pattern.
Not fixed means order is not fixed, data from any com port can come anytime. lenght is fixed, one com port have 14 byte and other 8 byte fixed..
Reading data is not an issue for me as it works nice but I have a query that why my application hangs after sometime and stops reading data from COM PORT.
Kudos are always welcome if you got solution to some extent.
I need my difficulties because they are necessary to enjoy my success.
--Ranjeet -
Problem while reading data from Serial Port
Hi All,
I am facing some problem while reading data from Serial Port.
As per the requirement I am writing the data on Serial Port and waiting for response of that data.
Notification for data availabilty is checked with method public void serialEvent(SerialPortEvent event) of javax.comm.SerialPortEventListener.
When we are writing data on the port one thread i.e. "main" thread is generated and when data availability event occures another thread "Win32SerialPort Notification thread" is generated. This creates problem for me as we can't control thread processing.
So can anybody pls explain me how to overcome this problem?
Regards,
NehaMy Problem is:-
I am simoultaneouly wrting data on port & reading data from port.
First I write data on port using outputStream.write() method. Now when target side sends me response back for the request on serial port DATA_AVAILABLE of SerialPortEventListner event occured,we are reading data from serial port.Now till the time we didn't get the response from target next command can't be written on the serial port. When we are writing data on port main thread is executed.Now my problem starts when DATA_AVAILABLE event occured.At this point another thread is created.Due to this my program writes data of next command without reading response of previous command.To solve this prob. I have used wait() & notify() methods as follows.But again due to this my pc hangs after execution of 2 commands. (PC hang in while loop in a code provided below.)
From SOPs I could figure it out that after 2 commands we are not able to write data on serial port so DATA_AVAILABLE event doesn't occure n pro. goes in wait state.
Can anybody help me to solve this issue.
Neha.
Code:
public void serialEvent(SerialPortEvent event)
switch (event.getEventType())
case SerialPortEvent.BI:
case SerialPortEvent.OE:
case SerialPortEvent.FE:
case SerialPortEvent.PE:
case SerialPortEvent.CD:
case SerialPortEvent.CTS:
case SerialPortEvent.DSR:
case SerialPortEvent.RI:
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
break;
case SerialPortEvent.DATA_AVAILABLE:
try
dataThread = Thread.currentThread();
dataThread.setPriority(10);
dataAvailable = true;
byte[] tempArray=new byte[availableBytes];
inputStream.read(tempArray);
catch (IOException io)
SOP(io, "Error in serialEvent callback call for event DATA_AVAILABLE");
public void writetoPort(byte[] data) throws IOException
outputStream.write(data);
while(finalTimeOut >= actualTime)
if( ! dataAvailable)
actualTime = System.currentTimeMillis();
else
synchronized (mainThread)
mainThread = Thread.currentThread();
mainThread.wait();
public void sendDatatoUser(byte[] b) throws Exception, HWCCSystemFailure
obj.returnData(b);
synchronized(mainThread)
mainThread.notify();
-
Read data from serial port or TCP port of frontend PC
Hello Friends,
I have requirement to read data from device connected to frontend PC which will provide meter reading data.
Vendor has given me two option.
1. Device can be connected to seiral port and data transfer will be done through MODBUS RTU protocol.In that case data need to capture from serial port.
2. Device can be connected to TCP port and Socket program can be provided for data transfer. In that case SAP will act as client and communicate with TCP port.
There will be multiple workstation with individual meters connected to them.
I am aware of text file interfacing through front end tools using custom code using VB,JAVA or others.
Is there any solution availble to achieve above things using ABAP other than text file , like direct communication?
I am using ECC 6.0.Hello,
Socket programming in not available on ABAP, but you may use RFC for the same.
Use the below links for more details
[Link 1|http://help.sap.com/printdocu/core/print46c/en/data/pdf/BCFESDE2/BCFESDE2.pdf]
[Link 2|http://forums.sdn.sap.com/thread.jspa?threadID=1820233]
Regards,
Abhishek -
Reading data from serial port needs optimisation
Hi,
We have got a class which reads input from some hardware connected to the serial port.
The data coming from the device can cross over 1mb at a time.
We would like to optimize the speed of the program such that no data is lost during the readings.
Hence, we would like to store the entire reading into memory such that it can be stored into a file or database once the readings have been completed.
The serialport class returns a byte[] of the current data in the buffer. There could be over 8000 such readings.
Would it be better to convert the byte[] into a char[] and append into a StringBuffer
or append the byte[] as is into an ArrayList and perform the conversions and operations on it later?
Reg,
ChetanThe ArrayList will not only be much faster but it will preserve the original data. Unless the incoming data really is a String there is no point in converting it.
-
Reading datas from serial port (palm)
Hi,
Because read methods (DataInputStream, stream on palm serial port) are blocking, how do I know if there is at least one available byte that can be read ?
ThanksHi,
I thought the method available() resolve the problem but this method gives the number of byte available without blocking.
I use :
public DataInputStream dis = null;
public int readDataBuf(byte[] buf) {
int status = -1;
try {
if (dis.read(buf, 0, 1) > 0) {
status = (buf[0] & 0xFF);
catch(IOException e) {
System.out.println(e.toString());
return status;
but with the read method if there is not byte the program stop wainting a byte.
Thanks -
Read Data from Communication Port (COM1)
I am designing a system for a weigh Bridge using FORMS 4.5. The computer is connected to weigh Bridge meter through com1. Is there any command or procedure through which I can read that particular reading through com1 and incorporate it in my Entery Form. If some one knows please give me feed back
ThanksHello adigerimu,
If you are using National Instruments ComponentWorks (Tools for Visual Basic) package, you can find serial examples located at "C:\MeasurementStudio\VB\Samples\Instr\Basic Serial" or wherever you installed Measurement Studio. We also have an example that uses VISA online at http://zone.ni.com then click RESOURCE LIBRARY >> COMPONENTWORKS >> GENERAL and look for links that mention "serial". If you are not using ComponentWorks, then this is not the appropriate newsgroup for your question, and I would recommend you start by looking at http://www.msdn.microsoft.com.
Jeremiah Cox
Applications Engineer
National Instruments
http://www.ni.com/ask -
How to read a data from USB port using JAVA
hi all,
i need to know how to read a data from USB port using java. any API are available for java ?.........please give your valuable ideas !!!!!!!!!
Advance Thanks!!You can do this. Please use this link
[http://www.google.co.in/search?hl=en&client=firefox-a&rls=org.mozilla%3Aen-US%3Aofficial&hs=uHu&q=java+read+data+from+usb+port&btnG=Search&meta=&aq=f&oq=]
What research did you do of your own? Have you done some testing application and tried yourself?? -
Reading data from another clients network connection
I would like anyone who know to direct me to some resources for how one could write code that can read data from a port without "binding" to it. In other words, I have an application running on windows talking to a server. I want to monitor that conversation with a separate java application. This is a simple sort of a firewall.
Is there a java api available, or a part of a package that can do this? So far, I have only seen information on binding to a port, which prevents the client from running at the same time as my java application.
Thanks very much in advance.The simplest way to implement this is to create a proxy. The client connects to your proxy and your proxy connects and forward all data. Montioring this is then trivial.
You could snoop the network, but I don't know and easy way to this in Java. Perhaps google has something. -
We want to read data from weigh bridge and display in oracle forms & store
Sir/Madam,
in our organisation we had one requirement. i.e is reading data from weigh bridge using serial port, displying that data in oracle forms and when ever user click save button we store that into my oracle database. we are using oracle 8i and forms 6i and windows OS environment. we don't know reading data from serial port and placing that into form items. please help me as early as possible if there is any property available in d2k regarding this requirement .
thank you,
vishnuThere's no property in Forms that makes you read serial ports, but as far as I know you need to know the API of the machine which you want to read data from (it should come with machine's manual) and then it will be easy to store it in forms item.
Tony -
Reading Data from serial (Comm) Port in developer200 forms 6i
Dears,
I have developed an application using Dev2k forms 6i.
I need to read data from a device (weigh bridge) that is attached to PC on comm port.
scenario: when a vehicle comes on the Weigh bridge it calculates its weight and send it to the PC on serial port.
on when-button-pressed event I want to get data into a text field on form.
If any one has developed such form please help me.
Thanks and regardsyou can:
create java class -> wrap plsql -> invoke plsql-code from button trigger
googling java class instead of creating =) -
Can not read data from URL!
Hello,
I want to read data from URL (http://84.100.130.82:8000/;stream.nsv). But can not do it. Because when try to call function openDataInputStream() shows this error: java.io.IOException: response does not start with HTTP it starts with: ICY. How I can fix this bug?
HttpConnection c = null;
InputStream is = null;
OutputStream os = null;
StringBuffer b = new StringBuffer();
String response,
responseLitle;
c = (HttpConnection)Connector.open(“http://84.100.130.82:8000/;stream.nsv”);
os = c.openOutputStream();
os.flush();
is = c.openDataInputStream(); // ERROR CODE HERE
int ch;
// receive output
while ((ch = is.read()) != -1)
b.append((char) ch);
response = b.toString();Regards, RamunasHi, I�m trying to do the same as above, get MP3 from a Shoutcast server.
I got the same fault ("response does not start with HTTP it starts with: ICY") when I tried to open an HttpConnection as bellow:
============================================
HttpConnection conn = (HttpConnection) Connector.open("http://64.236.34.196/stream/1074");
Then I tried to open a socket connection as bellow:
======================================
SocketConnection conn = (SocketConnection) Connector.open("socket://64.236.34.196:80");
String get = "GET /stream/1074 HTTP/1.1";
DataOutputStream os = conn.openDataOutputStream();
os.writeUTF(get);
InputStream is = conn.openInputStream();
But then I got the following error:
=========================
java.lang.SecurityException: Target port denied to untrusted applications
Could someone help me to find out what is going on?
Thanks a lot! -
Hi Everybody,
i'm playing a little bit with Windows Azure and I'm blocked with a really simple issue (or maybe not).
I've created a Cloud Service containing one simple Worker Role. I've configured an EndPoint in the WorkerRole configuration, which allows Input connections via tcp on port 10100.
Here the ServiceDefinition.csdef file content:
<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="EmacCloudService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2014-01.2.3">
<WorkerRole name="TcpListenerWorkerRole" vmsize="Small">
<Imports>
<Import moduleName="Diagnostics" />
<Import moduleName="RemoteAccess" />
<Import moduleName="RemoteForwarder" />
</Imports>
<Endpoints>
<InputEndpoint name="Endpoint1" protocol="tcp" port="10100" />
</Endpoints>
</WorkerRole>
</ServiceDefinition>
This WorkerRole is just creating a TcpListener object listening to the configured port (using the RoleEnvironment instance) and waits for an incoming connection. It receives a message and returns a hardcoded message (see code snippet below).
namespace TcpListenerWorkerRole
using System;
using System.Net;
using Microsoft.WindowsAzure.ServiceRuntime;
using System.Net.Sockets;
using System.Text;
using Roche.Emac.Infrastructure;
using System.IO;
using System.Threading.Tasks;
using Microsoft.WindowsAzure.Diagnostics;
using System.Linq;
public class WorkerRole : RoleEntryPoint
public override void Run()
// This is a sample worker implementation. Replace with your logic.
LoggingProvider.Logger.Info("TcpListenerWorkerRole entry point called");
TcpListener listener = null;
try
listener = new TcpListener(RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["Endpoint1"].IPEndpoint);
listener.ExclusiveAddressUse = false;
listener.Start();
LoggingProvider.Logger.Info(string.Format("TcpListener started at '{0}:{1}'", RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["Endpoint1"].IPEndpoint.Address, RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["Endpoint1"].IPEndpoint.Port));
catch (SocketException ex)
LoggingProvider.Logger.Exception("Unexpected exception while creating the TcpListener", ex);
return;
while (true)
Task.Run(async () =>
TcpClient client = await listener.AcceptTcpClientAsync();
LoggingProvider.Logger.Info(string.Format("Client connected. Address='{0}'", client.Client.RemoteEndPoint.ToString()));
NetworkStream networkStream = client.GetStream();
StreamReader reader = new StreamReader(networkStream);
StreamWriter writer = new StreamWriter(networkStream);
writer.AutoFlush = true;
string input = string.Empty;
while (true)
try
char[] receivedChars = new char[client.ReceiveBufferSize];
LoggingProvider.Logger.Info("Buffer size: " + client.ReceiveBufferSize);
int readedChars = reader.Read(receivedChars, 0, client.ReceiveBufferSize);
char[] validChars = new char[readedChars];
Array.ConstrainedCopy(receivedChars, 0, validChars, 0, readedChars);
input = new string(validChars);
LoggingProvider.Logger.Info("This is what the host sent to you: " + input+". Readed chars=" + readedChars);
try
string orderResultFormat = Encoding.ASCII.GetString(Encoding.ASCII.GetBytes("\xB")) + @"MSH|^~\&|Instrument|Laboratory|LIS|LIS Facility|20120427123212+0100||ORL^O34^ORL_O34| 11|P|2.5.1||||||UNICODE UTF-8|||LAB-28^IHE" + Environment.NewLine + "MSA|AA|10" + Environment.NewLine + @"PID|||patientId||""""||19700101|M" + Environment.NewLine + "SPM|1|sampleId&ROCHE||ORH^^HL70487|||||||P^^HL70369" + Environment.NewLine + "SAC|||sampleId" + Environment.NewLine + "ORC|OK|orderId|||SC||||20120427123212" + Encoding.ASCII.GetString(Encoding.ASCII.GetBytes("\x1c\x0d"));
writer.Write(orderResultFormat);
catch (Exception e)
LoggingProvider.Logger.Exception("Unexpected exception while writting the response", e);
client.Close();
break;
catch (Exception ex)
LoggingProvider.Logger.Exception("Unexpected exception while Reading the request", ex);
client.Close();
break;
}).Wait();
public override bool OnStart()
// Set the maximum number of concurrent connections
ServicePointManager.DefaultConnectionLimit = 12;
DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString");
RoleEnvironment.Changing += RoleEnvironment_Changing;
return base.OnStart();
private void RoleEnvironment_Changing(object sender, RoleEnvironmentChangingEventArgs e)
// If a configuration setting is changing
LoggingProvider.Logger.Info("RoleEnvironment is changing....");
if (e.Changes.Any(change => change is RoleEnvironmentConfigurationSettingChange))
// Set e.Cancel to true to restart this role instance
e.Cancel = true;
As you can see, nothing special is being done. I've used the RoleEnvironment.CurrentRoleInstance.InstanceEndpoints to retrieve the current IPEndpoint.
Running the Cloud Service in the Windows Azure Compute Emulator everything works fine, but when I deploy it in Azure, then I receive the following Exception:
2014-08-06 14:55:23,816 [Role Start Thread] INFO EMAC Log - TcpListenerWorkerRole entry point called
2014-08-06 14:55:24,145 [Role Start Thread] INFO EMAC Log - TcpListener started at '100.74.10.55:10100'
2014-08-06 15:06:19,375 [9] INFO EMAC Log - Client connected. Address='196.3.50.254:51934'
2014-08-06 15:06:19,375 [9] INFO EMAC Log - Buffer size: 65536
2014-08-06 15:06:45,491 [9] FATAL EMAC Log - Unexpected exception while Reading the request
System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
--- End of inner exception stack trace ---
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
at System.IO.StreamReader.ReadBuffer(Char[] userBuffer, Int32 userOffset, Int32 desiredChars, Boolean& readToUserBuffer)
at System.IO.StreamReader.Read(Char[] buffer, Int32 index, Int32 count)
at TcpListenerWorkerRole.WorkerRole.<>c__DisplayClass0.<<Run>b__2>d__0.MoveNext() in C:\Work\Own projects\EMAC\AzureCloudEmac\TcpListenerWorkerRole\WorkerRole.cs:line 60
I've already tried to configure an internal port in the ServiceDefinition.csdef file, but I get the same exception there.
As you can see, the client can connect to the service (the log shows the message: Client connected with the address) but when it tries to read the bytes from the stream, it throws the exception.
For me it seems like Azure is preventing the retrieval of the message. I've tried to disable the Firewall in the VM in Azure and the same continues happening.
I'm using Windows Azure SDK 2.3
Any help will be very very welcome!
Thanks in advance!
Javier
En caso de que la respuesta te sirva, porfavor, márcala como válida
Muchas gracias y suerte!
Javier Jiménez Roda
Blog: http://jimenezroda.wordpress.comhi Javier,
I changed your code like this:
private AutoResetEvent connectionWaitHandle = new AutoResetEvent(false);
public override void Run()
TcpListener listener = null;
try
listener = new TcpListener(
RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["Endpoint"].IPEndpoint);
listener.ExclusiveAddressUse = false;
listener.Start();
catch (SocketException se)
return;
while (true)
IAsyncResult result = listener.BeginAcceptTcpClient(HandleAsyncConnection, listener);
connectionWaitHandle.WaitOne();
The HandleAsync method is your "While (true)" code:
private void HandleAsyncConnection(IAsyncResult result)
TcpListener listener = (TcpListener)result.AsyncState;
TcpClient client = listener.EndAcceptTcpClient(result);
connectionWaitHandle.Set();
NetworkStream netStream = client.GetStream();
StreamReader reader = new StreamReader(netStream);
StreamWriter writer = new StreamWriter(netStream);
writer.AutoFlush = true;
string input = string.Empty;
try
char[] receivedChars = new char[client.ReceiveBufferSize];
// LoggingProvider.Logger.Info("Buffer size: " + client.ReceiveBufferSize);
int readedChars = reader.Read(receivedChars, 0, client.ReceiveBufferSize);
char[] validChars = new char[readedChars];
Array.ConstrainedCopy(receivedChars, 0, validChars, 0, readedChars);
input = new string(validChars);
// LoggingProvider.Logger.Info("This is what the host sent to you: " + input + ". Readed chars=" + readedChars);
try
string orderResultFormat = Encoding.ASCII.GetString(Encoding.ASCII.GetBytes("\xB")) + @"MSH|^~\&|Instrument|Laboratory|LIS|LIS Facility|20120427123212+0100||ORL^O34^ORL_O34| 11|P|2.5.1||||||UNICODE UTF-8|||LAB-28^IHE" + Environment.NewLine + "MSA|AA|10" + Environment.NewLine + @"PID|||patientId||""""||19700101|M" + Environment.NewLine + "SPM|1|sampleId&ROCHE||ORH^^HL70487|||||||P^^HL70369" + Environment.NewLine + "SAC|||sampleId" + Environment.NewLine + "ORC|OK|orderId|||SC||||20120427123212" + Encoding.ASCII.GetString(Encoding.ASCII.GetBytes("\x1c\x0d"));
writer.Write(orderResultFormat);
catch (Exception e)
// LoggingProvider.Logger.Exception("Unexpected exception while writting the response", e);
client.Close();
catch (Exception ex)
//LoggingProvider.Logger.Exception("Unexpected exception while Reading the request", ex);
client.Close();
Please try it. For this error message, I suggest you could refer to this thread (http://stackoverflow.com/questions/6173763/using-windows-azure-to-use-as-a-tcp-server
) and this post (http://stackoverflow.com/a/5420788).
Regards,
Will
We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
Click
HERE to participate the survey. -
How to save a datas from serial port?
How to save a datas from serial port?
Hi
I need some help about rs-232 communication. I want to make a vi witch can do this things:
-read a txt file (to simulate a serial port like when the datas are coming)
i will get 3 different data in serial port (like this: 121 213 135)
i want to save in a txt file what datas get my vi
so
-write in a txt file or draw in a diagram (or both)
so my problem is: read in serial port and save in a file and draw a diagram.
if anybody can help pls HELP ME because im a beginner in this problem.
I already do something but Im not sure that good.
Thx for all. -
LPX-00601: Invalid token in: err while trying to read data from xml
Hey ,
While trying to read data from xml i got err:
LPX-00601: Invalid token in: 'path'
the proc. i'm using to read data from the xml is:
procedure read_xml_file_test (in_filename in varchar2)
is
my_dir varchar2(20) := 'XML_DIR;
cur_emp2 number:=0;
l_bfile BFILE;
l_clob CLOB;
l_parser dbms_xmlparser.Parser;
l_doc dbms_xmldom.DOMDocument;
l_nl dbms_xmldom.DOMNodeList;
l_nl2 dbms_xmldom.DOMNodeList;
l_n dbms_xmldom.DOMNode;
l_n2 dbms_xmldom.DOMNode;
l_temp VARCHAR2(1000);
v_errors internet_clients.errors%type;
src_csid NUMBER := NLS_CHARSET_ID('UTF8');
dest_offset INTEGER := 1;
src_offset INTEGER := 1;
lang_context INTEGER := dbms_lob.default_lang_ctx;
warning INTEGER;
v_count number := 0; --total records
v_count_s number := 0; -- sucsess record
v_count_f number := 0; -- failed record
v_flag varchar2(1);
v_char2 varchar2(1);
v_l1 VARCHAR2(255);
v_l2 VARCHAR2(255);
v_l3 VARCHAR2(255);
v_l4 VARCHAR2(255);
v_l6 VARCHAR2(255);
BEGIN
l_bfile := BFileName(my_dir, in_filename);
dbms_lob.createtemporary(l_clob, cache=>FALSE);
dbms_lob.open(l_bfile, dbms_lob.lob_readonly);
dbms_lob.loadclobfromfile(l_clob, l_bfile, dbms_lob.getlength(l_bfile), dest_offset,src_offset, src_csid, lang_context, warning);
dbms_lob.close(l_bfile);
-- make sure implicit date conversions are performed correctly
dbms_session.set_nls('NLS_DATE_FORMAT','''DD/MM/RR HH24:MI:SS''');
-- Create a parser.
l_parser := dbms_xmlparser.newParser;
-- Parse the document and create a new DOM document.
dbms_xmlparser.parseClob(l_parser, l_clob);
l_doc := dbms_xmlparser.getDocument(l_parser);
-- Free resources associated with the CLOB and Parser now they are no longer needed.
dbms_lob.freetemporary(l_clob);
dbms_xmlparser.freeParser(l_parser);
-- Get a list of all the nodes in the document using the XPATH syntax.
l_nl := dbms_xslprocessor.selectNodes(dbms_xmldom.makeNode(l_doc),'soap:Envelope/soap:Body/GetFieldsNameResponse/GetFieldsNameResult/diffgr:diffgram/DataSet_FRM_GANERIC_PROP/FRM_GANERIC_PROP');
-- Loop through the list and create a new record in a tble collection
-- for each record.
FOR cur_emp IN 0 .. dbms_xmldom.getLength(l_nl) - 1 LOOP
l_n := dbms_xmldom.item(l_nl, cur_emp);
cur_emp2:=0;
loop
v_count := v_count + 1;
begin
-- Use XPATH syntax to assign values to he elements of the collection.
dbms_xslprocessor.valueOf(l_n,'L1/text()',v_l1);
dbms_xslprocessor.valueOf(l_n,'L2/text()',v_l2);
dbms_xslprocessor.valueOf(l_n,'L3/text()',v_l3);
dbms_xslprocessor.valueOf(l_n,'L4/text()',v_l4);
dbms_xslprocessor.valueOf(l_n,'L6/text()',v_l6);
exception
when others then
null;
end;
exit when cur_emp2=dbms_xmldom.getLength(l_nl2);
END LOOP;
end loop;
-- Free any resources associated with the document now it
-- is no longer needed.
dbms_xmldom.freeDocument(l_doc);
--remove file to another directory
--COMMIT; -- do not use the commit if you want to run this proc. from within the search_dir_list proc , because it execute a select from tmp table dir_list which contain a "on commit delete rows" clause.
/*EXCEPTION
/*WHEN OTHERS THEN
dbms_lob.freetemporary(l_clob);
dbms_xmlparser.freeParser(l_parser);
dbms_xmldom.freeDocument(l_doc);
null;
ROLLBACK; */
END;While trying to execute this i got:
ORA-31011: XML parsing failed
ORA-19202: Error occurred in XML processing
LPX-00601: Invalid token in: 'soap:Envelope/soap:Body/GetFieldsNameResponse/GetFieldsNameResult/diffgr:diffgram/DataSet_FRM_GANERIC_PROP/FRM_GANERIC_PROP'
ORA-06512: at "XDB.DBMS_XSLPROCESSOR", line 939
ORA-06512: at "XDB.DBMS_XSLPROCESSOR", line 967
ORA-06512: at "MARKET.READ_XML_FILE_TEST", line 51
ORA-06512: at line 1
i guess i mised somthing at the line
l_nl := dbms_xslprocessor.selectNodes(dbms_xmldom.makeNode(l_doc),'soap:Envelope/soap:Body/GetFieldsNameResponse/GetFieldsNameResult/diffgr:diffgram/DataSet_FRM_GANERIC_PROP/FRM_GANERIC_PROP');i attached here part of my xml:
<?xml version="1.0" encoding="UTF-8" ?>
- <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <soap:Body>
- <GetFieldsNameResponse xmlns="http://tempuri.org/">
- <GetFieldsNameResult>
- <xs:schema id="DataSet_FRM_GANERIC_PROP" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
- <xs:element name="DataSet_FRM_GANERIC_PROP" msdata:IsDataSet="true" msdata:Locale="he-IL">
- <xs:complexType>
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:element name="FRM_GANERIC_PROP">
- <xs:complexType>
- <xs:sequence>
</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">
- <DataSet_FRM_GANERIC_PROP xmlns="">
- <FRM_GANERIC_PROP diffgr:id="FRM_GANERIC_PROP1" msdata:rowOrder="0">
<L1>val1</L1>
<L2>val2</L2>
<L3>val3</L3>
<L4>val4</L4>
<L6>val6</L6>
</FRM_GANERIC_PROP>
</DataSet_FRM_GANERIC_PROP>
</diffgr:diffgram>
</GetFieldsNameResult>
</GetFieldsNameResponse>
</soap:Body>
</soap:Envelope>I Guess it somthing that have to do with node definition ,
but i have tried so many combinations and none ot those worked for me.
i'm deeply stuck here.
What do i miss here?
THANKS yair
Edited by: yair_k on 02:30 14/10/2010Hey , after got a lot of success with the xml reading part , i wonder if you
can help me with a problem while trying to reading that xml from a web service.
i use a procedure as followes:
FUNCTION read_from_web_service(in_username in varchar2 , in_password in varchar2)
RETURN CHAR
AS
l_service UTL_DBWS.service;
l_call UTL_DBWS.call;
l_a_ns VARCHAR2(32767);
l_wsdl_url VARCHAR2(32767);
l_namespace VARCHAR2(32767);
l_service_qname UTL_DBWS.qname;
l_port_qname UTL_DBWS.qname;
l_operation_qname UTL_DBWS.qname;
l_xmltype_in SYS.XMLTYPE;
l_xmltype_out SYS.XMLTYPE;
l_return VARCHAR2(32767);
BEGIN
l_wsdl_url := 'http://www.company.com/publisherService/ServiceGetpublisherTable.asmx?wsdl';
l_namespace := 'http://tempuri.org/';
l_service_qname := UTL_DBWS.to_qname(l_namespace, 'ServiceGetpublisherTable');
l_port_qname := UTL_DBWS.to_qname(l_namespace, 'ServiceGetpublisherTableSoap');
l_operation_qname := UTL_DBWS.to_qname(l_namespace, 'GetFieldsName');
l_service := UTL_DBWS.create_service (
wsdl_document_location => URIFACTORY.getURI(l_wsdl_url),
service_name => l_service_qname);
l_call := UTL_DBWS.create_call (
service_handle => l_service,
port_name => l_port_qname,
operation_name => l_operation_qname);
l_xmltype_in := SYS.XMLTYPE('<?xml version="1.0" encoding="utf-8"?>
<GetFieldsName xmlns="' || l_namespace || '">
<user>' || in_username || '</user>
<password>'|| in_password || '</password>
</GetFieldsName>');
l_xmltype_out := UTL_DBWS.invoke(call_Handle => l_call,
request => l_xmltype_in);
UTL_DBWS.release_call (call_handle => l_call);
UTL_DBWS.release_service (service_handle => l_service);
l_return := l_xmltype_out.extract('//GetFieldsName/text()').getstringVal();
dbms_output.put_line(l_return);
RETURN l_return;
END;but when i run it i got message:
ORA-29532: Java call terminated by uncaught Java exception: javax.xml.rpc.soap.SOAPFaultException: Server did not recognize the value of HTTP Header SOAPAction: .
regarding the line:
l_xmltype_out := UTL_DBWS.invoke(call_Handle => l_call,
request => l_xmltype_in);
So , i deeply stuck here!
my web service description is:
<?xml version="1.0" encoding="utf-8" ?>
- <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://tempuri.org/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
- <wsdl:types>
- <s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
- <s:element name="GetFieldsName">
- <s:complexType>
- <s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="user" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="password" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
- <s:element name="GetFieldsNameResponse">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1" name="GetFieldsNameResult">
- <s:complexType>
- <s:sequence>
<s:element ref="s:schema" />
<s:any />
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
</s:element>
- <s:element name="GetMSG_ByUser_Not_Readed">
- <s:complexType>
- <s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="user" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="password" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
- <s:element name="GetMSG_ByUser_Not_ReadedResponse">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1" name="GetMSG_ByUser_Not_ReadedResult">
- <s:complexType>
- <s:sequence>
<s:element ref="s:schema" />
<s:any />
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
</s:element>
- <s:element name="SetMSG_ByUser_Not_Readed_As_Readed">
- <s:complexType>
- <s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="user" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="password" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="Rec_Id" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
- <s:element name="SetMSG_ByUser_Not_Readed_As_ReadedResponse">
- <s:complexType>
- <s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="SetMSG_ByUser_Not_Readed_As_ReadedResult" type="s:boolean" />
</s:sequence>
</s:complexType>
</s:element>
</s:schema>
</wsdl:types>
- <wsdl:message name="GetFieldsNameSoapIn">
<wsdl:part name="parameters" element="tns:GetFieldsName" />
</wsdl:message>
- <wsdl:message name="GetFieldsNameSoapOut">
<wsdl:part name="parameters" element="tns:GetFieldsNameResponse" />
</wsdl:message>
- <wsdl:message name="GetMSG_ByUser_Not_ReadedSoapIn">
<wsdl:part name="parameters" element="tns:GetMSG_ByUser_Not_Readed" />
</wsdl:message>
- <wsdl:message name="GetMSG_ByUser_Not_ReadedSoapOut">
<wsdl:part name="parameters" element="tns:GetMSG_ByUser_Not_ReadedResponse" />
</wsdl:message>
- <wsdl:message name="SetMSG_ByUser_Not_Readed_As_ReadedSoapIn">
<wsdl:part name="parameters" element="tns:SetMSG_ByUser_Not_Readed_As_Readed" />
</wsdl:message>
- <wsdl:message name="SetMSG_ByUser_Not_Readed_As_ReadedSoapOut">
<wsdl:part name="parameters" element="tns:SetMSG_ByUser_Not_Readed_As_ReadedResponse" />
</wsdl:message>
- <wsdl:portType name="ServiceGetpublisherTableSoap">
- <wsdl:operation name="GetFieldsName">
<wsdl:input message="tns:GetFieldsNameSoapIn" />
<wsdl:output message="tns:GetFieldsNameSoapOut" />
</wsdl:operation>
- <wsdl:operation name="GetMSG_ByUser_Not_Readed">
<wsdl:input message="tns:GetMSG_ByUser_Not_ReadedSoapIn" />
<wsdl:output message="tns:GetMSG_ByUser_Not_ReadedSoapOut" />
</wsdl:operation>
- <wsdl:operation name="SetMSG_ByUser_Not_Readed_As_Readed">
<wsdl:input message="tns:SetMSG_ByUser_Not_Readed_As_ReadedSoapIn" />
<wsdl:output message="tns:SetMSG_ByUser_Not_Readed_As_ReadedSoapOut" />
</wsdl:operation>
</wsdl:portType>
- <wsdl:binding name="ServiceGetpublisherTableSoap" type="tns:ServiceGetpublisherTableSoap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
- <wsdl:operation name="GetFieldsName">
<soap:operation soapAction="http://tempuri.org/GetFieldsName" style="document" />
- <wsdl:input>
<soap:body use="literal" />
</wsdl:input>
- <wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
- <wsdl:operation name="GetMSG_ByUser_Not_Readed">
<soap:operation soapAction="http://tempuri.org/GetMSG_ByUser_Not_Readed" style="document" />
- <wsdl:input>
<soap:body use="literal" />
</wsdl:input>
- <wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
- <wsdl:operation name="SetMSG_ByUser_Not_Readed_As_Readed">
<soap:operation soapAction="http://tempuri.org/SetMSG_ByUser_Not_Readed_As_Readed" style="document" />
- <wsdl:input>
<soap:body use="literal" />
</wsdl:input>
- <wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
- <wsdl:binding name="ServiceGetpublisherTableSoap12" type="tns:ServiceGetpublisherTableSoap">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
- <wsdl:operation name="GetFieldsName">
<soap12:operation soapAction="http://tempuri.org/GetFieldsName" style="document" />
- <wsdl:input>
<soap12:body use="literal" />
</wsdl:input>
- <wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
- <wsdl:operation name="GetMSG_ByUser_Not_Readed">
<soap12:operation soapAction="http://tempuri.org/GetMSG_ByUser_Not_Readed" style="document" />
- <wsdl:input>
<soap12:body use="literal" />
</wsdl:input>
- <wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
- <wsdl:operation name="SetMSG_ByUser_Not_Readed_As_Readed">
<soap12:operation soapAction="http://tempuri.org/SetMSG_ByUser_Not_Readed_As_Readed" style="document" />
- <wsdl:input>
<soap12:body use="literal" />
</wsdl:input>
- <wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
- <wsdl:service name="ServiceGetpublisherTable">
- <wsdl:port name="ServiceGetpublisherTableSoap" binding="tns:ServiceGetpublisherTableSoap">
<soap:address location="http://www.company.com/publisherService/ServiceGetpublisherTable.asmx" />
</wsdl:port>
- <wsdl:port name="ServiceGetpublisherTableSoap12" binding="tns:ServiceGetpublisherTableSoap12">
<soap12:address location="http://www.company.com/publisherService/ServiceGetpublisherTable.asmx" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>also i have to mention that i have changed publisher references inside the code , and i also canot
supply username and password , so i guess you canot test it. still i not shure if my definitions (namespace est.) inside my code defined correctly.
hope you can help me with this.
regards
yair
Maybe you are looking for
-
Session time out up to # hours for Interaction center
Hi Experts, I want increase the web ui session time out up to # hours. I tried using SMICM and Technical Profile. But using these options i could not achieve such long session. I tried using RZ 11 icm keep alive parameter, but the effect will apply f
-
Passing Reuest ID in a Request Set.
Hi Guys, I've created a request set to run a Financial statement at stage 10 and then defined XML Report Publisher to run at stage 20. Problem is that XML Report Publisher requires the request id from stage 10. I've tried creating an SQL statement to
-
How can I get apps on y iPhone 3
How can I get apps on my iphone 3
-
I guess there are a few ways to take photo's and see them on a TV. some that I have used are: 1. Import into iMovie, add titles, transitions, music, etc., and then use iDVD. 2. Bring photo's directly into iDVD My DVD player says it reads Video CD's s
-
Some weeks ago, I installed OS X Yosemite, as shown on my App Store, that was a "System Update available for my IMac 2009". Followed all the steps, normally and installed it as I did many other times ago (with the Maverick, Mountain Lion, OS X). Just