cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Yanmin Sheng <ymsheng9...@gmail.com>
Subject Re: Can anybody take a look at CXF-4836?
Date Tue, 12 Mar 2013 02:51:38 GMT
Hi,
   Thanks for your quick response. I know it is a implementation
specific manner (e.g., lazy and eager validation ). But actualy I can
send out the message in CXF by removing the portInfo check in getPort
by setting the endpoint address in BindingProvider. If we throw
exception early, then I do not think I have chance to set address info
in BindingProvider.
	        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);


On Mon, Mar 11, 2013 at 2:58 PM, Willem jiang <willem.jiang@gmail.com> wrote:
> 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