<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Hi Adam,<br>
    <br>
    Oxygen installs it's own protocol handler for "http". As far as I
    can see, the problem would be that the
    ro.sync.net.protocol.http.WebdavHttpURLConnection.getResponseCode()
    method throws an exception instead of returning the 404 code. I'll
    add an issue for us to fix this. In the mean time I recommend using
    the Targeted URL Stream Handler [1] plugin extension. From this
    extension you can decide to use the SUN protocols when connecting to
    Jersey:<br>
    <br>
    <pre class="pre codeblock language-java"><strong class="hl-keyword" style="color:#7f0055">public</strong> <strong class="hl-keyword" style="color:#7f0055">class</strong> CustomTargetedURLStreamHandler<span class="highlight">Plugin</span>Extension 
  <strong class="hl-keyword" style="color:#7f0055">implements</strong> TargetedURLStreamHandler<span class="highlight">Plugin</span>Extension {

  <em><span class="hl-annotation" style="color: gray">@Override</span></em>
  <strong class="hl-keyword" style="color:#7f0055">public</strong> <strong class="hl-keyword" style="color:#7f0055">boolean</strong> canHandleProtocol(String protocol) {
    <strong class="hl-keyword" style="color:#7f0055">boolean</strong> handleProtocol = false;
    <strong class="hl-keyword" style="color:#7f0055">if</strong> (<span class="hl-string" style="color:#2a00ff">"http"</span>.equals(protocol) || <span class="hl-string" style="color:#2a00ff">"https"</span>.equals(protocol)) {
      <em class="hl-comment" style="color:#006400">// This extension handles both HTTP and HTTPS protocols</em>
      handleProtocol = true;
    }
    <strong class="hl-keyword" style="color:#7f0055">return</strong> handleProtocol;
  }</pre>
    <pre class="pre codeblock language-java">  <em><span class="hl-annotation" style="color: gray">@Override</span></em>
  <strong class="hl-keyword" style="color:#7f0055">public</strong> URLStreamHandler getURLStreamHandler(URL url) {
    <em class="hl-comment" style="color:#006400">// This method is called only for the URLs with a protocol </em>
    <em class="hl-comment" style="color:#006400">// for which the canHandleProtocol(String) method returns true (HTTP and HTTPS)</em>

    URLStreamHandler handler = null;
      
    String host = url.getHost();
    String protocol = url.getProtocol();
    <strong class="hl-keyword" style="color:#7f0055">if</strong> (<b><span class="hl-string" style="color:#2a00ff">"</span></b><b><span class="hl-string" style="color:#2a00ff">slaws.info"</span></b><b>.equals(host)</b>) {
      <em class="hl-comment" style="color:#006400">// When there are connections opened from some_host, the SUN HTTP(S) </em>
      <em class="hl-comment" style="color:#006400">// handlers are used</em>
      <strong class="hl-keyword" style="color:#7f0055">if</strong> (<span class="hl-string" style="color:#2a00ff">"http"</span>.equals(protocol)) {
        <b>handler = </b><strong class="hl-keyword" style="color:#7f0055">new</strong><b> sun.net.www.protocol.http.Handler();</b>
      } <strong class="hl-keyword" style="color:#7f0055">else</strong> {
        handler = <strong class="hl-keyword" style="color:#7f0055">new</strong> sun.net.www.protocol.https.Handler();
      }
    }
    <strong class="hl-keyword" style="color:#7f0055">return</strong> handler;
  }
}
}

</pre>
    [1]
<a class="moz-txt-link-freetext" href="http://oxygenxml.com/doc/versions/17.1/ug-editor/#concepts/targeted-url-handler-plugin.html">http://oxygenxml.com/doc/versions/17.1/ug-editor/#concepts/targeted-url-handler-plugin.html</a><br>
    <pre class="moz-signature" cols="72">Best regards,
Alex
-- 
Alex Jitianu
<oXygen/>  XML Editor, Schema Editor and XSLT Editor/Debugger
<a class="moz-txt-link-freetext" href="http://www.oxygenxml.com">http://www.oxygenxml.com</a> </pre>
    <div class="moz-cite-prefix">On 4/17/2016 4:44 AM, Adam Retter
      wrote:<br>
    </div>
    <blockquote
cite="mid:CAPK0icg5s_RcRaRt0dO2K5p+c_v8dy7upiwk=KEhnZPX72Gtyw@mail.gmail.com"
      type="cite">
      <pre wrap="">I am trying to use Jersey 2.22.2 from inside my Oxygen plugin, but
when I use a URL which my server doesn't recognise and results in a
404, then for a reason I don't understand Jersey seems to be throwing
me Oxygen's HttpExceptionWithDetails.

Any ideas how I can get Oxygen not to override Jersey's error
handling? The stacktrace looks like:

Exception in thread "AWT-EventQueue-0"
javax.ws.rs.ProcessingException:
ro.sync.net.protocol.http.HttpExceptionWithDetails: 404 Not Found for:
<a class="moz-txt-link-freetext" href="http://slaws.info/upload.php">http://slaws.info/upload.php</a>
at org.glassfish.jersey.client.internal.HttpUrlConnector.apply(HttpUrlConnector.java:287)
at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:255)
at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:684)
at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:681)
at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:444)
at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:681)
at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:437)
at org.glassfish.jersey.client.JerseyInvocation$Builder.post(JerseyInvocation.java:343)
at org.humanistika.oxygen.tei.authorizer.remote.impl.JerseyClient.uploadSuggestion(JerseyClient.java:157)
at org.humanistika.oxygen.tei.authorizer.TeiAuthorizer$AddNewSuggestionCIValue.uploadSuggestion(TeiAuthorizer.java:166)
at org.humanistika.oxygen.tei.authorizer.TeiAuthorizer$AddNewSuggestionCIValue.getInsertString(TeiAuthorizer.java:145)
at ro.sync.contentcompletion.g.x(Unknown Source)
at ro.sync.contentcompletion.f.ab(Unknown Source)
at ro.sync.contentcompletion.xml.k.gpm(Unknown Source)
at ro.sync.contentcompletion.l.j.spm(Unknown Source)
at ro.sync.contentcompletion.l.j.aom(Unknown Source)
at ro.sync.contentcompletion.l.j.processKeyEvent(Unknown Source)
at ro.sync.contentcompletion.l.u.processKeyEvent(Unknown Source)
at java.awt.Component.processEvent(Component.java:6312)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4891)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4713)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1954)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:806)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1074)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:945)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:771)
at java.awt.Component.dispatchEventImpl(Component.java:4762)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Window.dispatchEventImpl(Window.java:2750)
at java.awt.Component.dispatchEvent(Component.java:4713)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at ro.sync.ui.application.ApplicationLauncher$_b$1.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: ro.sync.net.protocol.http.HttpExceptionWithDetails: 404 Not
Found for: <a class="moz-txt-link-freetext" href="http://slaws.info/upload.php">http://slaws.info/upload.php</a>
at ro.sync.net.protocol.http.b.d.cb(Unknown Source)
at ro.sync.net.protocol.http.b.d.j(Unknown Source)
at ro.sync.net.protocol.http.abstraction.o.q(Unknown Source)
at ro.sync.net.protocol.http.abstraction.o.f(Unknown Source)
at ro.sync.net.protocol.http.WebdavHttpURLConnection.getInputStream(Unknown
Source)
at ro.sync.net.protocol.http.WebdavHttpURLConnection.getResponseCode(Unknown
Source)
at org.glassfish.jersey.client.internal.HttpUrlConnector._apply(HttpUrlConnector.java:394)
at org.glassfish.jersey.client.internal.HttpUrlConnector.apply(HttpUrlConnector.java:285)
... 53 more

Thanks Adam.

</pre>
    </blockquote>
    <br>
  </body>
</html>