将安全标头信息添加到从WSDL生成的Java代码中

将安全标头信息添加到从WSDL生成的Java代码中,java,web-services,netbeans,wsdl,Java,Web Services,Netbeans,Wsdl,我使用NetBeansWeb服务向导生成给定WSDL的Java代码。如果我将web服务方法拖到一个类中,那么它将创建一些Java代码来调用该web服务(例如:SubmitApplication)。我可以看到如何填充对象以向该web服务发送信息,但该服务还需要一个带有用户名/密码的安全标头 生成了一个名为SecurityHeader的类,该类包含用户名/密码属性。我可以使用有效的用户名/密码创建此对象,但我看不到如何传递该对象或将其添加到SubmitApplication调用。如何将Securit

我使用NetBeansWeb服务向导生成给定WSDL的Java代码。如果我将web服务方法拖到一个类中,那么它将创建一些Java代码来调用该web服务(例如:SubmitApplication)。我可以看到如何填充对象以向该web服务发送信息,但该服务还需要一个带有用户名/密码的安全标头

生成了一个名为SecurityHeader的类,该类包含用户名/密码属性。我可以使用有效的用户名/密码创建此对象,但我看不到如何传递该对象或将其添加到SubmitApplication调用。如何将SecurityHeader添加到SubmitApplication调用

下面是SOAP请求的示例:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Header>
        <SecurityHeader xmlns="http://schemas.turss.com/BDS/1.0/">
            <CreateTime>6/8/2012 8:32:59 PM</CreateTime>
            <Owner>Sample_Owner</Owner>
            <HashKey>Sample_Hash_Key</HashKey>
        </SecurityHeader>
    </soap:Header>
    <soap:Body>
        <SubmitApplication xmlns="http://schemas.turss.com/BDS/1.0/">
            <newSearch>
                <CurrentApplicant xmlns="http://schemas.turss.com/BDS/1.0/proxy">
                    <FirstName>Bob</FirstName>
                    <MiddleName />
                    <LastName>Smith</LastName>
                    <Suffix />
                    <BirthDate>1970-10-20T00:00:00</BirthDate>
                    <SSN />
                    <Address />
                    <City />
                    <State />
                    <PostalCode />
                </CurrentApplicant>
                <PermissiblePurpose xmlns="http://schemas.turss.com/BDS/1.0/proxy">TenantScreening</PermissiblePurpose>
            </newSearch>
        </SubmitApplication>
    </soap:Body>
</soap:Envelope>

2012年6月8日下午8:32:59
样本所有者
示例\u散列\u密钥
上下快速移动
史密斯
1970-10-20T00:00:00
租户筛选

我找到了一个示例代码,该代码将令牌字符串添加到soap安全头中。下面是代码的标题形式:

<TicketHeader>
    <Ticket>OD01096347CCA</Ticket>
</TicketHeader>
MySoapHandler的代码:

public class MySOAPHandler implements SOAPHandler {

    private String token;

    public DHSOAPHandler(String token) {
        this.token = token;
    }
    public boolean handleMessage(SOAPMessageContext messageContext) {
        SOAPMessage
        msg = messageContext.getMessage();
        if ((Boolean) messageContext.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY)){
            try {
                SOAPEnvelope envelope = msg.getSOAPPart().getEnvelope();
                SOAPHeader header = envelope.addHeader();
                SOAPElement el = header.addHeaderElement(envelope.createName("TicketHeader",
                                    "", "http://ws.service.com/"));
                el = el.addChildElement(envelope.createName("Ticket", "", "http://ws.service.com/"));
                el.setValue(token);
                msg.saveChanges();
            }
            catch (SOAPException    e) {
                return false;
            }
        }
        return true;
    }

    public boolean handleFault(SOAPMessageContext messageContext) {
        return true;
    } 

    public void close(MessageContext messageContext){
    }
    // I'm not quite sure about what should this function do, but I guess something like this...
    public Set getHeaders(){
        Set headers = new HashSet();
        headers.add(new QName("https://ws.service.com/", "TicketHeader"));
        return headers;
    }
}

你可能想看看这个Q/A:希望它有帮助…请你能发布MyService和MySoapService的代码。。我不是在这里设计如何添加,当我从Axis2 na创建存根时,我得到的是生成的3个文件1.BusinessServiceException.java 2.ScanningBSSVManagerStub.java 3.ScanningBSSVManagerCallbackHandler.java
public class MySOAPHandler implements SOAPHandler {

    private String token;

    public DHSOAPHandler(String token) {
        this.token = token;
    }
    public boolean handleMessage(SOAPMessageContext messageContext) {
        SOAPMessage
        msg = messageContext.getMessage();
        if ((Boolean) messageContext.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY)){
            try {
                SOAPEnvelope envelope = msg.getSOAPPart().getEnvelope();
                SOAPHeader header = envelope.addHeader();
                SOAPElement el = header.addHeaderElement(envelope.createName("TicketHeader",
                                    "", "http://ws.service.com/"));
                el = el.addChildElement(envelope.createName("Ticket", "", "http://ws.service.com/"));
                el.setValue(token);
                msg.saveChanges();
            }
            catch (SOAPException    e) {
                return false;
            }
        }
        return true;
    }

    public boolean handleFault(SOAPMessageContext messageContext) {
        return true;
    } 

    public void close(MessageContext messageContext){
    }
    // I'm not quite sure about what should this function do, but I guess something like this...
    public Set getHeaders(){
        Set headers = new HashSet();
        headers.add(new QName("https://ws.service.com/", "TicketHeader"));
        return headers;
    }
}