[jira] [Work logged] (CXF-8248) Root cause eaten when hostname rejected by the parser of URI.

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

[jira] [Work logged] (CXF-8248) Root cause eaten when hostname rejected by the parser of URI.

ASF GitHub Bot (Jira)

     [ https://issues.apache.org/jira/browse/CXF-8248?focusedWorklogId=408860&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-408860 ]

ASF GitHub Bot logged work on CXF-8248:

                Author: ASF GitHub Bot
            Created on: 24/Mar/20 15:46
            Start Date: 24/Mar/20 15:46
    Worklog Time Spent: 10m
      Work Description: zerikv commented on pull request #655: CXF-8248 - workaround to get the root cause when the hostname contains an underscore
URL: https://github.com/apache/cxf/pull/655
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[hidden email]

Issue Time Tracking

            Worklog Id:     (was: 408860)
    Remaining Estimate: 0h
            Time Spent: 10m

> Root cause eaten when hostname rejected by the parser of URI.
> -------------------------------------------------------------
>                 Key: CXF-8248
>                 URL: https://issues.apache.org/jira/browse/CXF-8248
>             Project: CXF
>          Issue Type: Bug
>          Components: Transports
>    Affects Versions: 3.2.8
>            Reporter: Eric Vernier
>            Priority: Minor
>          Time Spent: 10m
>  Remaining Estimate: 0h
> I'm using CXF (3.2.8 a bit old but the involved code seems always the same on master) to access the SOAP WebService WinRM on Windows Servers with the lib [WinRM4J|https://github.com/cloudsoft/winrm4j] which use the org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit.
> I saw that the underscore character is not allowed in hostname (as describe in [RFC 2396|http://www.ietf.org/rfc/rfc2396.txt]) but in the Active Directory DNS you can use underscore, so here in our private Cloud AzurePack it's possible to create a VM with an underscore in its hostname.
> When the WebService on a such VM is accessed the following exception is thrown :
> {code}
> java.lang.IllegalStateException: Buffer already closed for writing
> at org.apache.cxf.transport.http.asyncclient.SharedOutputBuffer.write(SharedOutputBuffer.java:229)
> at org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit$AsyncWrappedOutputStream$1.write(AsyncHTTPConduit.java:436)
> at org.apache.cxf.io.CacheAndWriteOutputStream.write(CacheAndWriteOutputStream.java:80)
> at java.io.ByteArrayOutputStream.writeTo(ByteArrayOutputStream.java:167)
> at org.apache.cxf.io.CachedOutputStream.writeCacheTo(CachedOutputStream.java:314)
> at org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit$AsyncWrappedOutputStream.close(AsyncHTTPConduit.java:415)
> at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
> at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:673)
> at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:63)
> at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
> at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:531)
> at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:440)
> at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:355)
> at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:313)
> at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96)
> at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:140)
> at com.sun.proxy.$Proxy212.create(Unknown Source)
> at sun.reflect.GeneratedMethodAccessor447.invoke(Unknown Source)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:498)
> at io.cloudsoft.winrm4j.client.RetryingProxyHandler.invokeWithRetry(RetryingProxyHandler.java:46)
> at io.cloudsoft.winrm4j.client.RetryingProxyHandler.invoke(RetryingProxyHandler.java:34)
> at com.sun.proxy.$Proxy213.create(Unknown Source)
> at io.cloudsoft.winrm4j.client.WinRmClient.createShell(WinRmClient.java:485)
> at io.cloudsoft.winrm4j.winrm.WinRmTool.executeCommand(WinRmTool.java:335)
> at com.carl.remote.winrm.WinrmConnection.execute(WinrmConnection.java:88)
> {code}
> It's not the root cause, so it's a bit difficult to find out the problem.
> The root cause is in fact an {{IllegalArgumentException: Host name may not be null}} thrown by the [HttpHost|https://github.com/apache/httpcomponents-core/blob/rel/v4.4.4/httpcore/src/main/java/org/apache/http/HttpHost.java#L80] when it's instanciated by [​CXFHttpAsyncRequestProducer#getTarget()|https://github.com/apache/cxf/blob/cxf-3.2.8/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFHttpAsyncRequestProducer.java#L62].
> The hostname is null because the parsing do by the java.net.URI reject the underscore (but doesn't thrown an URISyntaxException).
> I have managed a workaround (you can see it on this branch https://github.com/zerikv/cxf/commits/fix-lost-exception-hostname-with-underscore) at the end of the {{connect()}} method in the inner class {{AsyncWrappedOutputStream}} of [AsyncHTTPConduit|https://github.com/apache/cxf/blob/cxf-3.2.8/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduit.java#L584] so that {{IllegalArgumentException}} now goes back to the user.
> It's not even the real root cause but I think it's a little better than the {{Buffer already closed for writing}} message, at least it indicates that something is wrong with the hostname.
> For my initial problem (accept the hostnames with underscore because they exist I have meet them) the only solution I can find would be to replace the URI with the URL, but I guess it's not really an option.
> If someone see another way thank for advices.

This message was sent by Atlassian Jira