Tobias Flaig created CXF-9124:
---------------------------------

             Summary: TransportURIResolver prints stack trace to stderr when 
using HTTP Authentication
                 Key: CXF-9124
                 URL: https://issues.apache.org/jira/browse/CXF-9124
             Project: CXF
          Issue Type: Bug
          Components: JAX-WS Runtime
            Reporter: Tobias Flaig


The following issue happens when a WSDL document URL requires HTTP Basic 
authentication to load.

I create a default authenticator with the appropriate credentials:

 
{code:java}
Authenticator.setDefault(new Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(userName, password);
    }
});{code}
Now, I create a jakarta.xml.ws.Service:

 
{code:java}
service = Service.create(endpointUrl, serviceName); {code}
Where endpointUrl is the URL of the WSDL which requires authentication to load.

 

This works perfectly, but unfortunately, the following stacktrace is written to 
stderr (not even using a logger, but directly), which is misleading to the user:

 
{noformat}
org.apache.cxf.transport.http.HTTPException: HTTP response '401: (GET 
http://[...]?wsdl) 401' when communicating with http://[...]?wsdl
    at 
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.doProcessResponseCode(HTTPConduit.java:1677)
    at 
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1684)
    at 
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1626)
    at 
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1420)
    at 
org.apache.cxf.transport.http.HttpClientHTTPConduit$HttpClientWrappedOutputStream.close(HttpClientHTTPConduit.java:662)
    at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
    at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:717)
    at 
org.apache.cxf.transport.http.HttpClientHTTPConduit.close(HttpClientHTTPConduit.java:249)
    at 
org.apache.cxf.transport.TransportURIResolver.resolve(TransportURIResolver.java:134)
    at 
org.apache.cxf.wsdl11.CatalogWSDLLocator.getBaseInputSource(CatalogWSDLLocator.java:71)
    at 
org.apache.cxf.wsdl11.AbstractWrapperWSDLLocator.getBaseInputSource(AbstractWrapperWSDLLocator.java:70)
    at 
org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:225)
    at 
org.apache.cxf.wsdl11.WSDLManagerImpl.getDefinition(WSDLManagerImpl.java:165)
    at org.apache.cxf.jaxws.ServiceImpl.initializePorts(ServiceImpl.java:169)
    at org.apache.cxf.jaxws.ServiceImpl.initialize(ServiceImpl.java:160)
    at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:128)
    at 
org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:82)
    at jakarta.xml.ws.Service.<init>(Service.java:82)
    at jakarta.xml.ws.Service.create(Service.java:735)
[...]{noformat}
The reason for this seems to be that it first attempts to load the URL without 
authentication, and when this fails, once again with authentication, which is 
fine, except for the stack trace, which is written by 
org.apache.cxf.transport.TransportURIResolver.resolve ( 
[https://github.com/apache/cxf/blob/4fc8b120d7c7363c70324ff8c790494655ad3fa4/core/src/main/java/org/apache/cxf/transport/TransportURIResolver.java#L158]
 ).

My expectation would be:
 * No stack trace is ever written to stderr directly, it is written to the 
debug log instead, even if there is a real problem with URL resolution.
 * (If the retry is done by CXF, nothing has to be logged at all since there is 
no error)

 

 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to