2010-03-31 67 views
6

我正在使用WSIT/Metro創建一個簡單的Web服務。我得到的服務器上以下錯誤,當客戶端嘗試用一個簡單的用戶名/ passowrd認證方案連接:WSIT/Metro不理解安全SOAP標頭

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 

我不知道如何讓WSIT瞭解安全塊。

我從客戶端得到請求:

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

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

我的代碼,設置服務器:

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(); 
    } 
} 

回答

0

我不知道錯誤,但我認爲服務器不知道這個命名空間:http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd

你不寫關於客戶端。我也假設地鐵。 - 使用相同的版本? - 您是否使用wsimport來創建它?

如果不創建新的客戶端,請使用某個IDE嚮導來創建它,並配置安全性。這應該工作,如果它是人爲錯誤..

1

我剛剛有同樣的問題,我通過更新mi項目到METRO 2.0解決。在Netbeans上,項目屬性 - >導入庫 - > MEtro 2.0。

關於glassfish只是通過命令行更新相同的庫。