2015-10-20 60 views

回答

1

作为Web服务提供者可以在MessageContext通过HttpServletRequest访问由SOAP客户端使用的查询字符串:

package org.example.sampleservice; 

import javax.annotation.Resource; 
import javax.jws.HandlerChain; 
import javax.jws.WebService; 
import javax.servlet.http.HttpServletRequest; 
import javax.xml.ws.WebServiceContext; 
import javax.xml.ws.handler.MessageContext; 

@WebService(endpointInterface = "org.example.sampleservice.SampleService") 
public class SampleServiceImpl implements SampleService { 

    @Resource 
    private WebServiceContext ctx; 

    @Override 
    public String sayHello(String name) { 
     HttpServletRequest request = (HttpServletRequest) ctx.getMessageContext().get(MessageContext.SERVLET_REQUEST); 

     String result = String.format("Hello, %s (invoked with endpoint query parameters %s)", name, 
       request.getQueryString() == null ? "[no endpoint URL query parameters found]" 
         : request.getQueryString()); 
     return result; 
    } 

} 

你可以得到查询字符串作为一个字符串,因为我有以上(request.getQueryString() )或通过其他标准方法HttpServletRequest

此类实例SOAP客户端:

package org.example.consumer; 

import java.net.URL; 

import javax.xml.ws.BindingProvider; 

import org.example.sampleservice.SampleService; 
import org.example.sampleservice.SampleServiceImplService; 

public class SayHelloClientApp { 

    public static void main(String[] args) throws Exception { 
     URL wsdlLoc = new URL("http://localhost:8081/samplews/sample?WSDL"); 
     SampleServiceImplService svc = new SampleServiceImplService(wsdlLoc); 
     SampleService port = svc.getSampleServiceImplPort(); 

     BindingProvider bp = (BindingProvider) port; 
     String endpointURL = "http://localhost:8081/samplews/sample?a=1&b=2&c=3"; 
     bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointURL); 

     String result = port.sayHello("java"); 
     System.out.println(String.format("Result:\n%s", result)); 
    } 

} 

打印

Result: Hello, java (invoked with endpoint query parameters a=1&b=2&c=3)

+0

谢谢,我会给这是一个尝试,看看我能根据我的需要做这项工作。 – kbreezy04

+0

这正是我想要的,会标记为最佳答案。 – kbreezy04

相关问题