cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Willem jiang <willem.ji...@gmail.com>
Subject Re: Can anybody take a look at CXF-4836?
Date Mon, 11 Mar 2013 06:58:16 GMT
Hi,

If you just call the Service svc = Service.create(serviceName);
CXF know nothing about how to build the ServiceModel as it's only a ServiceName.
When you call  
port = svc.getPort(portName, MTOMInterface.class);
It can build the ServiceModel according to the MTOMInterface.class, but it doesn't know anything
about the endpoint address.
If we don't through the exception here, user will think the port object is OK for sending
invocation, and it is hard for him to track the issue in the run time.  
You still need to call the svc.addPort for it.

BTW, it's typical usage of JAXWS API, I don't think there is anything wrong with it.   

--  
Willem Jiang

Red Hat, Inc.
FuseSource is now part of Red Hat
Web: http://www.fusesource.com | http://www.redhat.com
Blog: http://willemjiang.blogspot.com (http://willemjiang.blogspot.com/) (English)
          http://jnn.iteye.com (http://jnn.javaeye.com/) (Chinese)
Twitter: willemjiang  
Weibo: 姜宁willem





On Monday, March 11, 2013 at 1:56 PM, Yanmin Sheng wrote:

> We create such client which will set target address info and binding
> info in RequestContext of BindingProvider.
>  
> String mtom11URL = "http://localhost:9080//MyBusiness/MTOM11Service";
>  
> MTOMInterface port = null;
> BindingProvider bp = null;
>  
> System.out.println("Looking up SOAP 1.1 MTOM service");
>  
> QName serviceName = new QName("http://shengym.com/MyBusiness/","MTOM11Service");
> QName portName = new QName("http://shengym.com/MyBusiness", "MTOM11Port");
> // Setup the necessary JAX-WS artifacts
> Service svc = Service.create(serviceName);
> port = svc.getPort(portName, MTOMInterface.class);
>  
> // Set the target URL
> bp = (BindingProvider) port;
> Map<String, Object> requestCtx = bp.getRequestContext();
> requestCtx.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,mtom11URL);
>  
> // Enable MTOM
> SOAPBinding binding = (SOAPBinding) bp.getBinding();
> binding.setMTOMEnabled(true);
>  
> However, it reports such error:
>  
> javax.xml.ws.WebServiceException:Port
> {http://shengym.com/MyBusiness/}
>  
> MTOM11Port not found.
> org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:332)
> org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:323)
> javax.xml.ws.Service.getPort(Service.java:134)
>  
> I know that the added following code can fix this error:
> svc.addPort(portName, SOAPBinding.SOAP11HTTP_MTOM_BINDING, mtom11URL);
>  
> Well, this error should not report even the addPort method is not called.
> I know the added check in ServiceImpl is to avoid run time error and
> report it as early as possible. But I think it is not needed. The
> reasons are:
> 1. User can get run time error later;
> 2. User can set target addess info and bind info in other ways (as my
> example shows)
>  
> I remove the check from the ServiceImpl then my client code works well.  



Mime
View raw message