
Como decodificar (o descendodear texto)
Publicado por Jhon (4 intervenciones) el 13/03/2014 21:53:59
Hola foreros,
Soy programador, pero hasta ahora empiezo a estudiar Java y en la empresa me impusieron un requerimiento y me tiene estancado hace dias, si me pudiesen ayudar se los agradezco mucho.
Les cuento. Se requiere implementar un consumidor que escuche un socket UDP, que recibe mensaje de unos STB (Set Top Box), los cuales envían informacion de estado. la informacion llega de la siguiente manera:
Como veran la informacion que viene en el tag data viene encodeada, el tag del sub-event con id 00, me funciona bien cuando la aplico la funcion base64.decode, pero lo otros no me arrojan la info que deberia.
Adjunto el fragmento de codigo que estoy utilizando, disculpen si ven cosas muy tontas pero como les dije recien estoy empezando a probar el java.
Soy programador, pero hasta ahora empiezo a estudiar Java y en la empresa me impusieron un requerimiento y me tiene estancado hace dias, si me pudiesen ayudar se los agradezco mucho.
Les cuento. Se requiere implementar un consumidor que escuche un socket UDP, que recibe mensaje de unos STB (Set Top Box), los cuales envían informacion de estado. la informacion llega de la siguiente manera:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2014-03-13 16:40:18,048 [DEBUG][QoETask] Send JMS message on QoE Topic:
<event version="0503" device-id="368101" id="2A">
<subevent-list>
<sub-event id="00">
<data>KioqKioqIENIQU5ORUwgQ0hBTkdFRCAqKioqKiogCiBwcmV2aW9zID0gODA3MTIsIG5leHQgPSA5MjcwNgA=UyIXsA==</data>
</sub-event>
<sub-event id="01">
<data>AA==</data>
</sub-event>
<sub-event id="02">
<data>AAAEZA==</data>
</sub-event>
<sub-event id="03">
<data></data>
</sub-event>
<sub-event id="04">
<data>AAADBA==</data>
</sub-event>
</subevent-list>
</event>
Como veran la informacion que viene en el tag data viene encodeada, el tag del sub-event con id 00, me funciona bien cuando la aplico la funcion base64.decode, pero lo otros no me arrojan la info que deberia.
Adjunto el fragmento de codigo que estoy utilizando, disculpen si ven cosas muy tontas pero como les dije recien estoy empezando a probar el java.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
public void onMessage(Message message) {
try {
// Check if the message is text
if (message instanceof TextMessage) {
TextMessage tm = (TextMessage) message;
// Get content of message
String msg = tm.getText();
InputStream stream = new ByteArrayInputStream(msg.getBytes("UTF-8"));
String stringMsg = IOUtils.toString(stream, "UTF-8")
String trimmedString = stringMsg.substring(colonPos);
//System.out.println("(L-91) trimmedString: " + trimmedString);
System.out.println("(L-84) trimmedString: " + trimmedString.getBytes("UTF-8"));
InputStream trimmedStream = new ByteArrayInputStream(trimmedString.getBytes("UTF-8"));
// Conventir en objeto DOM
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(trimmedStream);
//doc.getDocumentElement().normalize();
System.out.println("(L-93) El elemento raíz es: " + doc.getDocumentElement().getNodeName() + " - NodeType: " + doc.getDocumentElement().getNodeType());
NodeList subEventLists = doc.getElementsByTagName("subevent-list");
System.out.println("(L-95) subEventLists.item(0) NodeName: " + subEventLists.item(0).getNodeName() + " - NodeType: " + subEventLists.item(0).getNodeType());
NodeList subEvents = subEventLists.item(0).getChildNodes();
System.out.println("(L-97) subEvent NodeName: " + subEvents.item(0).getNodeName() + " - NodeType: " + subEvents.item(0).getNodeType());
System.out.println();
// Procesar mensaje recibido
for (int j = 0; j < subEvents.getLength(); j ++) {
NodeList subEvent = subEvents.item(j).getChildNodes();
Node data = subEvent.item(0);
System.out.println();
//System.out.println("(L-53) data NodeName: " + data.getNodeName());
//System.out.println("(L-54) data NodeType: " + data.getNodeType());
//System.out.println("(L-55) data getTextContent: " + data.getTextContent());
// Si es un ELEMENT_NODE
if (data.getNodeType() == Node.ELEMENT_NODE) {
Element elemento = (Element) data;
String encodedData = data.getChildNodes().item(0).getNodeValue();
System.out.println("(L-111) encoded Data: " + encodedData);
//System.out.println("(L-60) element NodeValue: " + elemento.getChildNodes().item(0).getNodeValue());
byte[] decodedData = Base64.decodeBase64(encodedData);
String subDecodedString = "";
String decodedString = StringUtils.newStringUtf8(decodedData).trim();
System.out.println("(L-129) decodedString.length(): " + decodedString.length());
System.out.println("(L-130) decodedString: " + decodedString);
if(decodedString.length() != 0 && decodedString.lastIndexOf("p") != -1){
// Buscar si la cadena contiene asteriscos
int lastPos = decodedString.lastIndexOf("p");
//System.out.println("(L-84) lastPos: " + lastPos + " - decoded Data: " + decodedString);
subDecodedString = decodedString.substring(lastPos);
// Buscar la posicion del ultimo asterisco
}
}
} // end for
}
Valora esta pregunta


0