Yan Min Sheng created CXF-4836:
----------------------------------

             Summary: ServiceImpl getPort does not need to throw Exception if 
the portName can not be found in portInfos
                 Key: CXF-4836
                 URL: https://issues.apache.org/jira/browse/CXF-4836
             Project: CXF
          Issue Type: Bug
          Components: JAX-WS Runtime
    Affects Versions: 2.6.2
            Reporter: Yan Min Sheng


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 
because we use bind and set transport info in RequestContext and SoapBinding of 
BindingProvider.

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. 

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to