Я использую WSIT / Metro для создания простого веб-сервиса. Я получаю следующую ошибку на сервере, когда клиент пытается подключиться с помощью простой схемы аутентификации по имени пользователя / паролю:
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 понимать блок безопасности.
Запрос, который я получаю от клиента:
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(); } }
У меня была такая же проблема, я решил обновить мой проект до METRO 2.0. в NetBeans, Свойства проекта -> Библиотека импорта -> MEtro 2.0.
На Glassfish просто обновите ту же библиотеку с помощью командной строки.
Я не уверен в ошибке, но я предполагаю, что сервер не знает об этом пространстве имен: http://docs.oasis -open.org / wss / 2004/01 / oasis-200401-wss-wssecurity-secext -1.0.xsd .
Вы не писали о клиенте. Метро тоже полагаю. - С той же версией? - Вы использовали wsimport для его создания?
Если новый клиент не создается, используйте мастер IDE для его создания, а также для настройки безопасности. Это должно работать, если это была человеческая ошибка.