2013-09-13 3 views
7

Я пытаюсь добавить пользовательские заголовки HTTP на веб-серверы Axis 1.4.Добавление собственных HTTP-заголовков в ответы веб-службы Axis 1.4

Я создал обработчик, который проходит BasicHandler:

public class HttpHeaderHandler extends BasicHandler { 

    . 
    . 
    . 

    @Override 
    public void invoke(org.apache.axis.MessageContext arg0) throws AxisFault { 
    LOG.trace("invoke called");  
    Hashtable ht = (Hashtable)ctx.getProperty(HTTPConstants.RESPONSE_HEADERS); 
    if(ht == null) { 
     ht = new Hashtable(); 
    } 
    ht.put("custom-header", "Hello"); 
    ctx.setProperty(HTTPConstants.RESPONSE_HEADERS, ht);  
    } 

    . 
    . 
    . 

} 

Я добавил следующий серверный config.wsdd:

. 
    . 
    . 

<transport name="http"> 
    <requestFlow> 
     <handler type="URLMapper" /> 
     <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler" /> 
    </requestFlow> 
    <responseFlow> 
     <handler type="java:com.my.package.HttpHeaderHandler" /> 
    </responseFlow> 
</transport> 

    . 
    . 
    . 

Я могу видеть, что метод Invoke в настоящее время вызванный, как ведение журнала появляется в файле журнала, но пользовательский заголовок не добавляется в ответ.

Любые предложения оценены.

+0

Нашел решение здесь, в конце http://stackoverflow.com/questions/3925272/handler-to-add-http-headers-to-http-request-not-invoked-when- с помощью оси-клиент-а. – mip

+0

Я дал вам ответ. – Khush

ответ

1

Я помню, используя файлы-заглушки, сгенерированные для добавления пользователя HTTP и пароль, проверьте эту ссылку и найдите код, который говорит:

_call.setProperty(org.apache.axis.client.Call.SEND_TYPE_ATTR, Boolean.FALSE); 

http://www.coderanch.com/t/225102/Web-Services/java/Axis-username-password-auth-stubs

Такого рода модификации работ.

0

Это то, что мы сделали

import javax.xml.soap.SOAPElement; 
import javax.xml.soap.SOAPException; 

/** 
* This method is to be used for secure SOAP calls. 
* Method created as Axis 1.4 strips the security header which compiling the Java classes. 
* @param username 
* @param password 
* @return SOAP Header 
* @throws SOAPException 
*/ 
public static SOAPHeaderElement createCustomSOAPHeader(String username, String password) throws SOAPException { 
    SOAPHeaderElement oHeaderElement; 
    SOAPElement oElement; 

    //Header 
    oHeaderElement = new SOAPHeaderElement("http://siebel.com/webservices", "Security"); 
    oHeaderElement.setPrefix("web"); 
    oHeaderElement.setMustUnderstand(false); 
    //Elements for the Header 
    oElement = oHeaderElement.addChildElement("UsernameToken"); 
    oElement.addTextNode(username); 
    oElement = oHeaderElement.addChildElement("PasswordText"); 
    oElement.addTextNode(password); 
    oElement = oHeaderElement.addChildElement("SessionType"); 
    oElement.addTextNode("None"); 

    return oHeaderElement; 
} 

Надеется, что это помогает.

+1

Это не HTTP-заголовок, это заголовок SOAP. – MariuszS

+0

@MariuszS Не Axis 1.4 используется для SOAP ??? Может ли он использоваться и для HTPP? Это новость для меня. – Khush

+0

Да, Axis может использоваться для SOAP через HTTP Transport, а для некоторых реальных сценариев требуется добавить HTTP-заголовок. Посмотрите на этот ответ -> http://stackoverflow.com/questions/3925272/handler-to-add-http-headers-to-http-request-not-invoked-when-using-axis-client-a – MariuszS

1

я был в состоянии сделать это на org.apache.axis.Stub, например, выполнив следующие действия:

private Stub setHeaders(Stub stub, Hashtable<String, String> headers){ 
    stub._setProperty(HTTPConstants.REQUEST_HEADERS, headers); 
    return stub; 
} 

Обратите внимание, что требуется, чтобы значение аргумента _setProperty() будет java.util.Hashtable (он получает отливать позже по оси когда используется Stub)

Смежные вопросы