WSIT / Metro不了解​​Security SOAP标头 [英] WSIT/Metro doesn't understand Security SOAP header

查看:107
本文介绍了WSIT / Metro不了解​​Security SOAP标头的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用WSIT / Metro创建一个简单的Web服务。当客户端尝试使用简单的用户名/ passowrd身份验证方案连接时,我在服务器上收到以下错误:

I'm using WSIT/Metro to create a simple web-service. I'm getting the following error on the server when a client tries to connect with a simple username/passowrd authentication scheme:

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了解安全块。

I have no idea how to make WSIT understand the Security block.

我从客户那里得到的请求:

The request I get from the client:

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

我的代码,设置服务器:

My code, setting up the server:

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


推荐答案

我刚刚遇到同样的问题,我通过将mi项目更新为METRO 2.0解决了这个问题。在Netbeans上,项目属性 - >导入库 - > MEtro 2.0。

I just had the same problem, I solved by updating mi project to METRO 2.0. on Netbeans, Project Properties -> import Library -> MEtro 2.0.

在glassfish上只需通过命令行更新同一个库。

On glassfish just update the same library by command line.

这篇关于WSIT / Metro不了解​​Security SOAP标头的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆