Hi Sergey, Can you formulate the issue you are seeing in the form of a failing unit test?
Gary On Mon, Jun 19, 2017 at 9:02 AM, Sergey Beryozkin <[email protected]> wrote: > Hi > > Awhile back, may be 5-6 years back, I had to deal with the following TCK > test: > > assertEquals("mailto:[email protected]", > > UriBuilder.fromUri(new > URI("mailto:[email protected]")).uri(new > URI(null, "[email protected]", null)). > build(); > > > new URI("mailto:[email protected]") is opaque, while > new URI(null, "[email protected]", null) is not. > > At a time I found that the only way for this test to pass was to block any > rawPaths not starting from "/" causing the confusion in the code, such that > in this test, when > > new URI(null, "[email protected]", null). > > is submitted, the original "mailto" scheme is preserved, and the original > scheme specific part, "[email protected]" is overridden as expected, > otherwise there would be some 'conflict; in the internal state, after the > 1st pass the 'path' is undefined because it was an opaque URI, and in the > second pass we suddenly get a path component value which is meant to > replace an origin schemeSpecificPart where the path component was not even > defined... > > I realize that is not the most robust approach, but that worked at a time. > > I see that UriBuilder.fromPath() does work in this case. > > Can you think of the fix that can address your issue such that the > original UriBuilderImplTest tests continue passing ? > > Thanks, Sergey > > > > > On 17/06/17 00:23, Rubén Pérez wrote: > >> Hi, >> >> Sorry for the double mail. >> >> I forgot to add that, while I know the .jar versions are not the latest, >> I checked the code in Fisheye and from what I understood the issue >> corresponds with the latest code. The problems seems to arise from the code >> in the line 627 <https://fisheye.apache.org/br >> owse/cxf/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxr >> s/impl/UriBuilderImpl.java?hb=true#to627> [2]: if the path does not >> start with a "/", the varirable schemeSpecificPart is set to null, which in >> turn prevents the code block in the line 161 < >> https://fisheye.apache.org/browse/cxf/rt/frontend/jaxrs/src >> /main/java/org/apache/cxf/jaxrs/impl/UriBuilderImpl.java?hb=true#to161> >> [3] to run. >> >> Regards >> >> >> On 16/06/17 23:52, Rubén Pérez wrote: >> >>> >>> Hi, >>> >>> This is my first email to the list, so I hope I will not miss something >>> or do something wrong. I'm writing here instead of reporting a bug >>> directly, mainly because I'm not sure if I can even register in the bug >>> tracker, so apologies if that was the expected way to go. >>> >>> Cutting to the chase, I believe there is a bug in the UriBuilderImpl. >>> Specifically, when an instance of the class is created through the >>> '.fromURI' method, and the provided URI does not start with a "/" (i.e. it >>> has no schema and authority and its path is not absolute), UriBuilderImpl >>> assumes incorrectly that the URI is non-hierarchical and therefore the >>> '.build()' method will always return the provided URI without modification, >>> regardless of which edit methods (e.g. "queryParam", "path", etc.) are >>> called on the instance. >>> >>> In order to illustrate what I mean, I created a very simple program >>> (attached). I compiled it with: >>> >>> javac -cp '.:<path_to_the_jar>/javax.ws.rs-api-2.0.1.jar' >>> UriBuilderBug.java >>> >>> and runned it with: >>> >>> java -cp '.:/<path_to_the_jar>/javax.ws >>> .rs-api-2.0.1.jar:<path_to_the_jar2>/cxf-rt-frontend-jaxrs- >>> 3.1.11.jar:<path_to_the_jar3>/cxf-core-3.1.11.jar' UriBuilderBug >>> >>> The RFC-3986, in its section 4.2 <https://tools.ietf.org/html/r >>> fc3986#section-4.2> [1] defines the syntax for valid relative URI >>> references and explicitly allows references without schema or authority >>> that do *not* start with a forward slash. Perhaps part of the confusion >>> comes from the fact that the ABNF defining the relative references is as >>> follows: >>> >>> relative-part = "//" authority path-abempty >>> / path-absolute >>> / path-noscheme >>> / path-empty >>> >>> , where the "/" symbol representing the different alternatives can be >>> easily mistaken for a literal "/" in the URI itself. >>> >>> So that's it. Thanks for reading till here. Please let know your >>> opinions about this and, if I'm right, it would be great to get it fixed >>> soon. If something is not clear or you have any questions, I'm willing to >>> answer them. If there's a reason for the current behaviour, or if I am >>> incorrectly interpreting the standard, I'd also be very glad to know. >>> >>> Best regards >>> -- >>> Rubén Pérez Vázquez >>> >>> *Universität zu Köln* >>> /Regionales Rechenzentrum (RRZK)/ >>> Weyertal 121, Raum 4.05 >>> D-50931 Köln >>> ✆: +49-221-470-89603 >>> >>> [1] https://tools.ietf.org/html/rfc3986#section-4.2 >>> >> >> > > -- > Sergey Beryozkin > > Talend Community Coders > http://coders.talend.com/ >
