Solved

sending xml message in a java udp packet

Posted on 2008-06-12
11
1,517 Views
Last Modified: 2013-11-23
I'm trying to send an xml message to a Java SAX parser listening on a UDP port.
When I send a message the parser it gives the error message

 [Fatal Error] :1:1 Content is not allowed in prolog.

I've reduced my UDP packet to just the prolog and I still get the error

Here is what I'm sending

String xmlMsg = new String("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");

byte buffer[] = xmlMsg.getBytes();
DatagramSocket sndSocket = new DatagramSocket();
sndSocket.send(new DatagramPacket(buffer,buffer.length,InetAddress.getByName("127.0.0.1"),Integer.parseInt("3031")));

I want to find out what I'm doing wrong and how do I send an XML message in a UDP packet that the SAX parser will accept?
0
Comment
Question by:mitchguy
  • 6
  • 5
11 Comments
 
LVL 86

Expert Comment

by:CEHJ
ID: 21772083
>> [Fatal Error] :1:1 Content is not allowed in prolog.

That sounds more like an error with reading xml, not writing it. At what point are you getting that message
0
 

Author Comment

by:mitchguy
ID: 21772265
The reader is doing this

DatagramPacket incomingPacket = new DatagramPacket(buffer,buffer.length);
listenSocket.receive(incomingPacket);
byte data[] = incomingPacket.getData();
InputSource source = new InputSource(new StringReader(data.toString()));
fromXML(source);

private synchronized fromXML(InputSource in) throws Exception
{
  XMLReader xr;
  xr.setContentHandler(this);
  xr.parse(in);
}
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 21772450
>>InputSource source = new InputSource(new StringReader(data.toString()));

should be as below
InputSource source = new InputSource(new StringReader(new String(data)));

Open in new window

0
 

Author Comment

by:mitchguy
ID: 21772538
I'm not sure I understand the difference between data.toString() and new String(data) ?

I made the change and ran it again I get this error listed below still



[Fatal Error] :1:39: Content is not allowed in prolog.
org.xml.sax.SAXParseException: Content is not allowed in prolog

Which is actually a little different than before, the difference being
before the numbers after [Fatal Error] were 1:1 and now it is 1:39
The size of the message is 38 maybe I have some sort of missing character
that is supposed to be at the end of the data for the parser?
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 21772641
Well  byte[] doesn't have a toString method that will be of any use to you. Can you instead do this and tell us what gets printed?
String s = new String(data);

System.out.println(data);

InputSource source = new InputSource(new StringReader(s));

Open in new window

0
DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

 

Author Comment

by:mitchguy
ID: 21772798
The output is certainly not what I expected

[B@1113708

Since I'm sending and receiving on the same machine it shouldn't be a byte swap problem right?
0
 
LVL 86

Accepted Solution

by:
CEHJ earned 125 total points
ID: 21772904
>>[B@1113708

That looks suspiciously like the output of data.toString, which i've already said not to use ..;-)
0
 

Author Comment

by:mitchguy
ID: 21773164
If I do this
String myString = new String(incomingPacket.getData());
The output is
<?xml version="1.0" encoding="UTF-8"?>

However after that I did
InputSource source = new InputSource(new StringReader(myString));

and unfortunately still got the error
[Fatal Error] :1:39: Content is not allowed in prolog.
org.xml.sax.SAXParseException: Content is not allowed in prolog
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 21773306
Well of course your software is expecting to parse a document. 'myString' is just a header. You need the rest of the doc in there too
0
 

Author Comment

by:mitchguy
ID: 21773433
That did the Trick:)
Thanks!
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 21773461
:-)
0

Featured Post

DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
XML & .net 5 40
javap bin 2 25
XSLT XML 4 13
MS Access MSXML2 DomDocument.Load and XMLHTTP.Send Not Sending utf-8 Char Format Correctly 3 40
By the end of 1980s, object oriented programming using languages like C++, Simula69 and ObjectPascal gained momentum. It looked like programmers finally found the perfect language. C++ successfully combined the object oriented principles of Simula w…
Java Flight Recorder and Java Mission Control together create a complete tool chain to continuously collect low level and detailed runtime information enabling after-the-fact incident analysis. Java Flight Recorder is a profiling and event collectio…
Viewers learn how to read error messages and identify possible mistakes that could cause hours of frustration. Coding is as much about debugging your code as it is about writing it. Define Error Message: Line Numbers: Type of Error: Break Down…
This video teaches viewers about errors in exception handling.

919 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now