Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Java, comunicacion

Si ese es el contenido.

Y esta es la clase:

private String parseSOAPString(String SOAPMessage)
{
try
{
SOAPMessage = SOAPMessage.substring(SOAPMessage.indexOf(key,0)+key.length()+1,SOAPMessage.lastIndexOf(key)-2);
return SOAPMessage;
}
catch(Exception e)
{
error=new Exception("Unknown answer from WebService");
return null;
}
}

mayo 25, 2012 | Registered Commenteradriano

Ese valor "key", no veo dónde se inicializa.
Tal vez esa sea la causa del resultado null.

mayo 25, 2012 | Registered Commenterchoces

Se inicializa aquí:

class TcAdsSOAP
{
private String soapTargetUrl;
private final String soap_read= "\"http://beckhoff/action/TcAdsSync.Read\"";
private final String soap_write= "http://beckhoff.org/action/TcAdsSync.Write";
private Exception error;
public String key = "ppData";

mayo 25, 2012 | Registered Commenteradriano

Hay algo extraño en ese método.
De entrada, no veo que en el message response te aparezca ese valor "ppData" en ningún sitio.
¿El substring no te dará un IndexOutOfBoundsException?. ¿Podrías comprobarlo, en vez de reenviar la excepción?

mayo 25, 2012 | Registered Commenterchoces

No me da esa excepción,
lo siento pero no se como podría comprobarlo¿?

mayo 26, 2012 | Registered Commenteradriano

Prueba a declarar el método de esta manera.
De todos modos, la única excepción que lanza substring es ésa. Lo que no me queda nada claro es el significado de ese key. Da la impresión de que se quiere comprobar que el key se encuentra en el message response (lo que parece lógico); pero a key debería asignársele un valor "esperado". ¿Estás seguro de que el valor de key deba ser "ppData"?. Estoy casi seguro de que ese método lanza la excepción, porque no me explico entonces que devuelva un null.

private String parseSOAPString(String SOAPMessage) {
try {
return SOAPMessage.substring(SOAPMessage.indexOf(key, 0) + key.length() + 1, SOAPMessage.lastIndexOf(key) - 2);;
} catch (IndexOutOfBoundsException e) {
System.out.println("error "+e.getCause());
error = new Exception("Unknown answer from WebService");
}
}

mayo 26, 2012 | Registered Commenterchoces

Para poder compilarlo necesito hacerlo de esta manera si no me da error por el return.

private String parseSOAPString(String SOAPMessage)
{
return SOAPMessage.substring(SOAPMessage.indexOf(key, 0) + key.length() + 1, SOAPMessage.lastIndexOf(key) - 2);
}

Y ahora si me lanza el siguiente error:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -9
at java.lang.String.substring(String.java:1958)
at ADS_communication.TcAdsSOAP.parseSOAPString(TcAdsSOAP.java:319)
at ADS_communication.TcAdsSOAP.SOAPCall(TcAdsSOAP.java:263)
at ADS_communication.TcAdsSOAP.SOAPCall(TcAdsSOAP.java:199)
at ADS_communication.TcAdsSOAP.ReadBool(TcAdsSOAP.java:43)
at ADS_communication.AdSWebServiceSample.main(AdSWebServiceSample.java:18)
Java Result: 1

La linea 1958 es la siguiente:
throw new StringIndexOutOfBoundsException(endIndex - beginIndex);

y el código este, el cual no puedo reescribir porque es privado

public String substring(int beginIndex, int endIndex) {
if (beginIndex < 0) {
throw new StringIndexOutOfBoundsException(beginIndex);
}
if (endIndex > count) {
throw new StringIndexOutOfBoundsException(endIndex);
}
if (beginIndex > endIndex) {
throw new StringIndexOutOfBoundsException(endIndex - beginIndex);
}
return ((beginIndex == 0) && (endIndex == count)) ? this :
new String(offset + beginIndex, endIndex - beginIndex, value);
}

mayo 26, 2012 | Registered Commenteradriano

Ya parece claro que o bien el valor asignado a key no es el correcto, o la respuesta SOAP no es la que debería ser.
Ya ves que lanza la excepción porque la asignación de índices al substring es incorrecta, y es debido a que no "encuentra" el valor de key dentro del message response.

mayo 26, 2012 | Registered Commenterchoces