SOAP 用法 => SAAJ0537:无效 Content-Type。在小程序中

SOAP usage => SAAJ0537: Invalid Content-Type. in an applet

我正在尝试在 C# 下开发一个应用程序,它在 Java 中有一些小程序,当我 运行 它时,我在 Java 控制台上看到一个错误,它是:

SAAJ0537: Invalid Content-Type.

更确切地说是这个:

 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

如果我没记错的话,它说的是 headers 中的内容。错误的代码是这个:

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 "";
            }
        }
    

它失败了,为什么?请问你能帮帮我吗?。非常感谢。错误所在的行是这一行:SOAPMessage response = connection.call(message, endpoint);

当我在浏览器上安装来自 C# 的 asmx 时,我得到了这个:

POST /web/soa/soa.asmx HTTP/1.1
Host: localhost
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://localhost:3624/getConfig"

<?xml version="1.0" encoding="utf-8"?>
 <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
 <soap:Body>
  <getConfig xmlns="http://localhost:3624/">
    <id>string</id>
  </getConfig>
 </soap:Body>

我的小程序做的消息是这个:

  <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>

我该如何解决?

我不得不从端点的末尾删除一个 /。做完之后。有效。