On Thu, 2006-11-02 at 10:31 +0000, Conrad O'Dea wrote:
> On Thu, 2006-11-02 at 17:41 +0800, Freeman Fang wrote:
> > 
> > If you can provide your test case, that would be great for us to write 
> > the test.
> 
> I'll put this together now...
> 

Here's a really simple provider that attempts to set a test header.  The
main line GETs the message from the provider and checks if the header is
set.
package test;

import java.io.StringReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.ws.BindingType;
import javax.xml.ws.Endpoint;
import javax.xml.ws.Provider;
import javax.xml.ws.Service;
import javax.xml.ws.ServiceMode;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.WebServiceProvider;
import javax.xml.ws.handler.MessageContext;

@WebServiceProvider()
@ServiceMode(value = Service.Mode.PAYLOAD)
//@BindingType(value = "http://cxf.apache.org/bindings/xformat";)
@BindingType(value = "http://celtix.objectweb.org/bindings/xmlformat";)
public class HeaderTest implements Provider<Source> {
    
    public static final String TEST_HEADER_NAME = "Test";
    
    @Resource
    WebServiceContext wsCtx; 
    
    @SuppressWarnings("unchecked")
    public Source invoke(Source arg0) {
        MessageContext ctx = wsCtx.getMessageContext();

        List<String> hdr = new ArrayList<String>();
        hdr.add("test-value");
        Map<String, List<String>> hdrs = (Map<String, List<String>>)ctx.get(MessageContext.HTTP_RESPONSE_HEADERS);
            
        if (hdrs != null) {
            hdrs.put(TEST_HEADER_NAME, hdr);
        } 
        return new StreamSource(new StringReader("<foo/>"));
    }

    public static void main(String[] args) throws Exception {
        try { 
            URL url = new URL("http://localhost:9999";);
            System.out.println("publishing endpoint");
            Endpoint.publish(url.toString(), new HeaderTest());
            System.out.println("server ready");
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();

            conn.connect();
            boolean ok = false;
            Map<String, List<String>> hdrs = conn.getHeaderFields();
            for (String hdrName : hdrs.keySet()) {
                List<String> value = hdrs.get(hdrName);
                System.out.println(hdrName + ": " + value);
                if (TEST_HEADER_NAME.equals(hdrName)) {
                    ok = true;
                }
            }
            System.out.println("Test " + (ok ? "PASSED" : "FAILED"));
        } finally {
            System.exit(0);
        }
    }
}

Reply via email to