Java SOAP使用=>;SAAJ0537:无效的内容类型。在小程序中
我正试图在C#下开发一个应用程序,它有一些Java小程序,当我运行它时,我在Java控制台上看到一个错误,这是: SAAJ0537:无效的内容类型 更确切地说,这是一个:Java SOAP使用=>;SAAJ0537:无效的内容类型。在小程序中,java,c#,web-services,soap,applet,Java,C#,Web Services,Soap,Applet,我正试图在C#下开发一个应用程序,它有一些Java小程序,当我运行它时,我在Java控制台上看到一个错误,这是: SAAJ0537:无效的内容类型 更确切地说,这是一个: feb 18, 2015 12:46:10 PM com.sun.xml.internal.messaging.saaj.soap.MessageImpl identifyContentType GRAVE: SAAJ0537: Content-Type no válido. Podría ser un mensaje d
feb 18, 2015 12:46:10 PM com.sun.xml.internal.messaging.saaj.soap.MessageImpl identifyContentType
GRAVE: SAAJ0537: Content-Type no válido. Podría ser un mensaje de error en lugar de un mensaje SOAP
com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Invalid Content-Type:text/html. Is this an error message instead of a SOAP response?
at
com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(Unknown Source)
at paqSoap.Soap.enviar_y_obtener_string(Soap.java:273)
at paqConfiguracion.ConfiguracionMenu.<init>(ConfiguracionMenu.java:404)
at paqApplet.PruebaMenu.iniciarVariables(PruebaMenu.java:265)
at paqApplet.PruebaMenu.init(PruebaMenu.java:165)
at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter.init(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Invalid Content-Type:text/html. Is this an error message instead of a SOAP response?
at com.sun.xml.internal.messaging.saaj.soap.MessageImpl.identifyContentType(Unknown Source)
at com.sun.xml.internal.messaging.saaj.soap.MessageFactoryImpl.createMessage(Unknown Source)
at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(Unknown Source)
... 8 more
public String enviar_y_obtener_string() {
try
{
SOAPConnectionFactory scf = SOAPConnectionFactory.newInstance();
SOAPConnection connection = scf.createConnection();
//Crea el mensaje
MessageFactory mf = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
SOAPMessage message = mf.createMessage();
System.out.println("El mensaje al principio es:"+message);
//Crea las partes del mensaje
SOAPPart soapPart = message.getSOAPPart();
SOAPEnvelope envelope = soapPart.getEnvelope();
SOAPBody body = envelope.getBody();
System.out.println("El servidor en enviar_y_obtener_string es:"+servidor+" y el método es:"+metodo);
Name n = envelope.createName(metodo,"","http://localhost:3624/");
SOAPBodyElement soapBodyElement =body.addBodyElement(n);
for(int i=0;i<lista_nombre_parametros.size();i++)
{
SOAPElement soapElement = soapBodyElement.addChildElement(lista_nombre_parametros.get(i).toString());
System.out.println("El nombre del parámetro es:"+lista_nombre_parametros.get(i).toString());
int tipo=Integer.valueOf(lista_tipo_parametro.get(i).toString()).intValue();
if(tipo==IdTipoCadena){
soapElement.addTextNode(lista_valores_parametros.get(i).toString());
System.out.println("El valor es:"+ lista_valores_parametros.get(i).toString());
}
else
{
SOAPFactory soapFactory = SOAPFactory.newInstance();
Name nodeName = envelope.createName("nodo");
SOAPElement soapElementint=soapElement.addChildElement(nodeName);
ArrayList arraydev=(ArrayList)lista_valores_parametros.get(i);
for(int j=0;j<arraydev.size();j++)
{
Name name3 = envelope.createName("carlos");
SOAPElement soapElementhijo=soapElementint.addChildElement(name3);
soapElementhijo.addTextNode("p");
}
}
}
message.setProperty(Call.SOAPACTION_USE_PROPERTY, new Boolean( true ));
message.setProperty(Call.SOAPACTION_URI_PROPERTY,url);
MimeHeaders hd = message.getMimeHeaders();
String serverURI = soapAction;
System.out.println("ServerURI en enviar_y_obtener_string es:"+serverURI);
hd.addHeader("SOAPAction", "http://localhost:3624/getConfig");
url=leerPropiedades()[2];
System.out.println("La url es dentro de enviar_y_obtener_string:"+url);
//Establece la URL del destino
URL endpoint = new URL(url);
//Envía el mensaje
System.out.println("Endpoint es:"+endpoint);
String msg;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
message.writeTo(baos);
msg = baos.toString();
System.out.println("msg es:"+message);
SOAPMessage response = connection.call(message, endpoint);
System.out.println("Voy a cerrar la conexión");
//Cierra la conexión
connection.close();
//Obtiene los resultados
TransformerFactory tf = TransformerFactory.newInstance();
return response.getSOAPBody().getFirstChild().getTextContent();
}
catch (Exception ex)
{
ex.printStackTrace();
return "";
}
}
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body><getConfig xmlns="http://localhost:3624/"><id>1628</id></getConfig>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
我的小程序执行的消息如下:
feb 18, 2015 12:46:10 PM com.sun.xml.internal.messaging.saaj.soap.MessageImpl identifyContentType
GRAVE: SAAJ0537: Content-Type no válido. Podría ser un mensaje de error en lugar de un mensaje SOAP
com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Invalid Content-Type:text/html. Is this an error message instead of a SOAP response?
at
com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(Unknown Source)
at paqSoap.Soap.enviar_y_obtener_string(Soap.java:273)
at paqConfiguracion.ConfiguracionMenu.<init>(ConfiguracionMenu.java:404)
at paqApplet.PruebaMenu.iniciarVariables(PruebaMenu.java:265)
at paqApplet.PruebaMenu.init(PruebaMenu.java:165)
at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter.init(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Invalid Content-Type:text/html. Is this an error message instead of a SOAP response?
at com.sun.xml.internal.messaging.saaj.soap.MessageImpl.identifyContentType(Unknown Source)
at com.sun.xml.internal.messaging.saaj.soap.MessageFactoryImpl.createMessage(Unknown Source)
at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(Unknown Source)
... 8 more
public String enviar_y_obtener_string() {
try
{
SOAPConnectionFactory scf = SOAPConnectionFactory.newInstance();
SOAPConnection connection = scf.createConnection();
//Crea el mensaje
MessageFactory mf = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
SOAPMessage message = mf.createMessage();
System.out.println("El mensaje al principio es:"+message);
//Crea las partes del mensaje
SOAPPart soapPart = message.getSOAPPart();
SOAPEnvelope envelope = soapPart.getEnvelope();
SOAPBody body = envelope.getBody();
System.out.println("El servidor en enviar_y_obtener_string es:"+servidor+" y el método es:"+metodo);
Name n = envelope.createName(metodo,"","http://localhost:3624/");
SOAPBodyElement soapBodyElement =body.addBodyElement(n);
for(int i=0;i<lista_nombre_parametros.size();i++)
{
SOAPElement soapElement = soapBodyElement.addChildElement(lista_nombre_parametros.get(i).toString());
System.out.println("El nombre del parámetro es:"+lista_nombre_parametros.get(i).toString());
int tipo=Integer.valueOf(lista_tipo_parametro.get(i).toString()).intValue();
if(tipo==IdTipoCadena){
soapElement.addTextNode(lista_valores_parametros.get(i).toString());
System.out.println("El valor es:"+ lista_valores_parametros.get(i).toString());
}
else
{
SOAPFactory soapFactory = SOAPFactory.newInstance();
Name nodeName = envelope.createName("nodo");
SOAPElement soapElementint=soapElement.addChildElement(nodeName);
ArrayList arraydev=(ArrayList)lista_valores_parametros.get(i);
for(int j=0;j<arraydev.size();j++)
{
Name name3 = envelope.createName("carlos");
SOAPElement soapElementhijo=soapElementint.addChildElement(name3);
soapElementhijo.addTextNode("p");
}
}
}
message.setProperty(Call.SOAPACTION_USE_PROPERTY, new Boolean( true ));
message.setProperty(Call.SOAPACTION_URI_PROPERTY,url);
MimeHeaders hd = message.getMimeHeaders();
String serverURI = soapAction;
System.out.println("ServerURI en enviar_y_obtener_string es:"+serverURI);
hd.addHeader("SOAPAction", "http://localhost:3624/getConfig");
url=leerPropiedades()[2];
System.out.println("La url es dentro de enviar_y_obtener_string:"+url);
//Establece la URL del destino
URL endpoint = new URL(url);
//Envía el mensaje
System.out.println("Endpoint es:"+endpoint);
String msg;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
message.writeTo(baos);
msg = baos.toString();
System.out.println("msg es:"+message);
SOAPMessage response = connection.call(message, endpoint);
System.out.println("Voy a cerrar la conexión");
//Cierra la conexión
connection.close();
//Obtiene los resultados
TransformerFactory tf = TransformerFactory.newInstance();
return response.getSOAPBody().getFirstChild().getTextContent();
}
catch (Exception ex)
{
ex.printStackTrace();
return "";
}
}
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body><getConfig xmlns="http://localhost:3624/"><id>1628</id></getConfig>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
1628
如何解决它?我必须从端点的末尾删除/。做完之后。它可以工作。我想您的服务器不发送soap,而是发送文本(根据错误消息)。确保你连接的站点以正确的格式响应。我已经添加了一些关于我得到的东西。谢谢,我不是那个上网的人,但是服务器是否会发送一个内容标志?这可能是设置为text,应该是soap。问题一定出在Java方面,因为来自.net的webservice工作正常,因为我已经用SoapUI对它进行了测试