2010-03-31 13 views
6

Estoy usando WSIT/Metro para crear un servicio web simple. Estoy recibiendo el siguiente error en el servidor cuando un cliente intenta conectar con un esquema simple nombre de usuario/passowrd autenticación:WSIT/Metro no entiende el encabezado SOAP de seguridad

2010.03.31. 19:10:33 com.sun.xml.ws.protocol.soap.MUTube getMisUnderstoodHeaders 
INFO: Element not understood={http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd}Security 

no tengo idea de cómo hacer WSIT entender el bloque de seguridad.

La solicitud de recibo por parte del cliente:

<?xml version="1.0" encoding="http://www.w3.org/2003/05/soap-envelope" standalone="no"?> 
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"> 
    <soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing"> 
     <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
      soapenv:mustUnderstand="true"> 
      <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" 
       wsu:Id="UsernameToken-1"> 
       <wsse:Username>admin</wsse:Username> 
       <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">admin</wsse:Password> 
      </wsse:UsernameToken> 
     </wsse:Security> 
     <wsa:To>http://localhost:11122/services/TopJtapiRemoteMethods</wsa:To> 
     <wsa:MessageID>urn:uuid:D5C576F83D74F761311270055433217</wsa:MessageID> 
     <wsa:Action>urn:hasCallPolling</wsa:Action> 
    </soapenv:Header> 
    <soapenv:Body /> 
</soapenv:Envelope> 

WSDL del servidor:

<?xml version="1.0" encoding="UTF-8"?> 
<wsdl:definitions 
    targetNamespace="http://soapserver.topjtapi.cti.topdesk.com" 
    xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" 
    xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702" 
    xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" 
    xmlns:ns="http://soapserver.topjtapi.cti.topdesk.com" 
    xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" 
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:wsoap12="http://schemas.xmlsoap.org/wsdl/soap12/"> 
    <wsp:Policy wsu:Id="PasswordAuthPolicy"> 
     <wsp:All> 
      <sp:SupportingTokens> 
       <wsp:Policy> 
        <sp:UsernameToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient"> 
         <wsp:Policy> 
          <sp:WssUsernameToken10 /> 
         </wsp:Policy> 
        </sp:UsernameToken> 
       </wsp:Policy> 
      </sp:SupportingTokens> 
     </wsp:All> 
    </wsp:Policy> 

    <wsdl:types> 
     <!-- ... --> 
    </wsdl:types> 
    <wsdl:message name="incomingCallRequest"> 
     <!-- ... --> 
    </wsdl:message> 
    <wsdl:portType name="TopJtapiRemoteMethodsPortType"> 
     <!-- ... --> 
    </wsdl:portType> 
    <wsdl:binding name="TopJtapiRemoteMethodsSoap12Binding" type="ns:TopJtapiRemoteMethodsPortType"> 
     <wsp:PolicyReference URI="#PasswordAuthPolicy"/> 
     <wsoap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> 
     <wsdl:operation name="hasCallPolling"> 
      <!-- ... --> 
     </wsdl:operation> 
    </wsdl:binding> 
    <wsdl:service name="TopJtapiRemoteMethods"> 
     <wsdl:port name="TopJtapiRemoteMethodsHttpSoap12Endpoint" binding="ns:TopJtapiRemoteMethodsSoap12Binding"> 
     </wsdl:port> 
    </wsdl:service> 
</wsdl:definitions> 

Mi código, la configuración del servidor:

import java.io.InputStream; 
import java.util.Collections; 

import javax.jws.WebService; 
import javax.xml.transform.Source; 
import javax.xml.transform.stream.StreamSource; 
import javax.xml.ws.Endpoint; 
import javax.xml.ws.Holder; 

import com.topdesk.cti.topjtapi.soapserver2.HasCallPollingResponse; 
import com.topdesk.cti.topjtapi.soapserver2.TopJtapiRemoteMethodsPortType; 

public class EndpointTester { 

    @WebService(endpointInterface = "com.topdesk.cti.topjtapi.soapserver2.TopJtapiRemoteMethodsPortType") 
    private static final class MockImplementation implements TopJtapiRemoteMethodsPortType { 
     @Override 
     public HasCallPollingResponse hasCallPolling() { 
      return null; 
     } 
    } 

    /** 
    * @see javax.xml.ws.soap.SOAPBinding#SOAP12HTTP_BINDING 
    * @see https://jax-ws.dev.java.net/2.1.7/docs/soap12.html 
    */ 
    private static final String SOAP12_BINDING_ID = "http://java.sun.com/xml/ns/jaxws/2003/05/soap/bindings/HTTP/"; 

    public static void main(String[] args) throws Exception { 
     Endpoint endpoint = Endpoint.create(SOAP12_BINDING_ID, new MockImplementation()); 
     InputStream wsdlStream = EndpointTester.class.getResourceAsStream("/topjtapi-webapp/wsdl/TopJtapiRemoteMethods.wsdl"); 
     endpoint.setMetadata(Collections.<Source> singletonList(new StreamSource(wsdlStream, "http://soapserver.topjtapi.cti.topdesk.com"))); 
     endpoint.publish("http://localhost/services/TopJtapiRemoteMethods"); 

     System.in.read(); 
    } 
} 

Respuesta

0

No estoy seguro acerca de el error, pero supongo que el servidor no sabe sobre este espacio de nombres: http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd.

No escribió sobre el cliente. Metro también supongo. - ¿Con la misma versión? - ¿Usó wsimport para crearlo?

Si no crea un nuevo cliente, use algún asistente IDE para crearlo, también para configurar la seguridad. Esto debería funcionar si fue un error humano ...

1

Acabo de tener el mismo problema, lo resolví actualizando mi proyecto a METRO 2.0. en Netbeans, Propiedades del proyecto -> importar biblioteca -> MEtro 2.0.

En glassfish simplemente actualice la misma biblioteca por línea de comandos.

Cuestiones relacionadas