Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1634
  • Last Modified:

sending xml message in a java udp packet

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
mitchguy
Asked:
mitchguy
  • 6
  • 5
1 Solution
 
CEHJCommented:
>> [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
 
mitchguyAuthor Commented:
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
 
CEHJCommented:
>>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
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
mitchguyAuthor Commented:
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
 
CEHJCommented:
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
 
mitchguyAuthor Commented:
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
 
CEHJCommented:
>>[B@1113708

That looks suspiciously like the output of data.toString, which i've already said not to use ..;-)
0
 
mitchguyAuthor Commented:
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
 
CEHJCommented:
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
 
mitchguyAuthor Commented:
That did the Trick:)
Thanks!
0
 
CEHJCommented:
:-)
0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 6
  • 5
Tackle projects and never again get stuck behind a technical roadblock.
Join Now