Plugin API - duplicate network request sent when calling a DELETE endpoint
Post here questions and problems related to oXygen frameworks/document types.
-
- Posts: 2
- Joined: Wed Feb 19, 2025 7:35 pm
Plugin API - duplicate network request sent when calling a DELETE endpoint
Post by gc_swilson39 »
I am working on a plugin that connects to a small ecosystem of Spring microservices using Eureka and Feign. I am seeing an odd issue where I call an endpoint that uses the DELETE http method, and I see that Oxygen sends the correct request followed closely by a second request using the same URL, only with the GET method. This second request is then getting a 405 response from the remote server, which ends up throwing errors in my plugin. This does NOT happen when calling endpoints that use GET, PUT, or POST methods.
Attached a Wireshark screen grab to show that there are in fact 2 requests. They occur in 2 different TCP streams.
We're using the Oxygen 26.1 SDK currently.
The plugin structure consists of a Workspace Access Plugin, which loads an independent Spring Boot module on application start.
The spring module runs in a separate thread, and there are wrapper classes to provide static access into the spring context and the feign client interfaces.
The component where I am seeing the issue is actually a custom LockHandler implementation, calling the unlock method, which then asks the Spring backend to make a request to the releaseLock endpoint.
I am wondering if this has anything to do with the HttpClient getting selected by Oxygen to build the feign client? For instance I noticed the WebdavHttpURLConnection in the trace below.
Stack Trace:
ro.sync.net.protocol.http.b.s.x(Unknown Source)
ro.sync.net.protocol.http.b.s.c(Unknown Source)
ro.sync.net.protocol.http.abstraction.n.r(Unknown Source)
ro.sync.net.protocol.http.abstraction.n.e(Unknown Source)
ro.sync.net.protocol.http.WebdavHttpURLConnection.obtainResponse(Unknown Source)
ro.sync.net.protocol.http.WebdavHttpURLConnection.getInputStream(Unknown Source)
feign.Client$Default.convertResponse(Client.java:135)
feign.Client$Default.execute(Client.java:107)
org.springframework.cloud.openfeign.loadbalancer.LoadBalancerUtils.executeWithLoadBalancerLifecycleProcessing(LoadBalancerUtils.java:56)
org.springframework.cloud.openfeign.loadbalancer.LoadBalancerUtils.executeWithLoadBalancerLifecycleProcessing(LoadBalancerUtils.java:91)
org.springframework.cloud.openfeign.loadbalancer.FeignBlockingLoadBalancerClient.execute(FeignBlockingLoadBalancerClient.java:134)
feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:100)
feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:70)
feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:99)
jdk.proxy3/jdk.proxy3.$Proxy132.cmsReleaseLockById(Unknown Source)
com.gc.oxygenspringbackend.pluginaccess.CMSAccess.releaseLock(CMSAccess.java:32)
com.gc.oxygenplugin.protocolhandler.CustomLockHandler.unlock(CustomLockHandler.java:44)
ro.sync.exml.editor.kf.q(Unknown Source)
ro.sync.exml.editor.kf$1.bkg(Unknown Source)
ro.sync.ui.application.kb.run(Unknown Source)
Attached a Wireshark screen grab to show that there are in fact 2 requests. They occur in 2 different TCP streams.
WiresharkTrace.png
Details:We're using the Oxygen 26.1 SDK currently.
The plugin structure consists of a Workspace Access Plugin, which loads an independent Spring Boot module on application start.
The spring module runs in a separate thread, and there are wrapper classes to provide static access into the spring context and the feign client interfaces.
The component where I am seeing the issue is actually a custom LockHandler implementation, calling the unlock method, which then asks the Spring backend to make a request to the releaseLock endpoint.
I am wondering if this has anything to do with the HttpClient getting selected by Oxygen to build the feign client? For instance I noticed the WebdavHttpURLConnection in the trace below.
Stack Trace:
ro.sync.net.protocol.http.b.s.x(Unknown Source)
ro.sync.net.protocol.http.b.s.c(Unknown Source)
ro.sync.net.protocol.http.abstraction.n.r(Unknown Source)
ro.sync.net.protocol.http.abstraction.n.e(Unknown Source)
ro.sync.net.protocol.http.WebdavHttpURLConnection.obtainResponse(Unknown Source)
ro.sync.net.protocol.http.WebdavHttpURLConnection.getInputStream(Unknown Source)
feign.Client$Default.convertResponse(Client.java:135)
feign.Client$Default.execute(Client.java:107)
org.springframework.cloud.openfeign.loadbalancer.LoadBalancerUtils.executeWithLoadBalancerLifecycleProcessing(LoadBalancerUtils.java:56)
org.springframework.cloud.openfeign.loadbalancer.LoadBalancerUtils.executeWithLoadBalancerLifecycleProcessing(LoadBalancerUtils.java:91)
org.springframework.cloud.openfeign.loadbalancer.FeignBlockingLoadBalancerClient.execute(FeignBlockingLoadBalancerClient.java:134)
feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:100)
feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:70)
feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:99)
jdk.proxy3/jdk.proxy3.$Proxy132.cmsReleaseLockById(Unknown Source)
com.gc.oxygenspringbackend.pluginaccess.CMSAccess.releaseLock(CMSAccess.java:32)
com.gc.oxygenplugin.protocolhandler.CustomLockHandler.unlock(CustomLockHandler.java:44)
ro.sync.exml.editor.kf.q(Unknown Source)
ro.sync.exml.editor.kf$1.bkg(Unknown Source)
ro.sync.ui.application.kb.run(Unknown Source)
You do not have the required permissions to view the files attached to this post.
-
- Posts: 2
- Joined: Wed Feb 19, 2025 7:35 pm
Re: Plugin API - duplicate network request sent when calling a DELETE endpoint
Post by gc_swilson39 »
Just wanted to add that I suspect this is happening in code outside of my control because when I run the exact same code using a POST method instead (literally only changing @DeleteMapping to @PostMapping in my feign client interface of the plugin backend, and adding a new POST endpoint to the external microservice), I only see a single request come across Wireshark.
WiresharkTrace_POST.png
This is our workaround for the time being. I'm just stumped what to do if we ever need a DELETE request and don't have the ability to change the external microservice.You do not have the required permissions to view the files attached to this post.
-
- Posts: 9431
- Joined: Fri Jul 09, 2004 5:18 pm
Re: Plugin API - duplicate network request sent when calling a DELETE endpoint
Hi,
Indeed Oxygen installs its own HTTP/HTTPS protocol handler internally and uses its own WebdavHttpURLConnection which may work a bit differently from the Java Oracle base URL connection handler.
I added an internal issue to explore this further on our side, pasting the issue ID below for future reference:
EXM-55359 WebdavHttpUrlConnection seems to issue extra GET request for DELETE request
We'll reply back on this thread if we manage to fix this in a future Oxygen version.
We do have this plugin extension point which would allow you for a certain host name to force using the SUN URL connection implementation for example:
https://www.oxygenxml.com/doc/versions/ ... lugin.html
Regards,
Radu
Indeed Oxygen installs its own HTTP/HTTPS protocol handler internally and uses its own WebdavHttpURLConnection which may work a bit differently from the Java Oracle base URL connection handler.
I added an internal issue to explore this further on our side, pasting the issue ID below for future reference:
EXM-55359 WebdavHttpUrlConnection seems to issue extra GET request for DELETE request
We'll reply back on this thread if we manage to fix this in a future Oxygen version.
We do have this plugin extension point which would allow you for a certain host name to force using the SUN URL connection implementation for example:
https://www.oxygenxml.com/doc/versions/ ... lugin.html
Regards,
Radu
Radu Coravu
<oXygen/> XML Editor
http://www.oxygenxml.com
<oXygen/> XML Editor
http://www.oxygenxml.com
-
- Posts: 9431
- Joined: Fri Jul 09, 2004 5:18 pm
Re: Plugin API - duplicate network request sent when calling a DELETE endpoint
Hi,
As an update, we released Oxygen 27.1 which should have a fix for this reported problem.
Regards,
Radu
As an update, we released Oxygen 27.1 which should have a fix for this reported problem.
Regards,
Radu
Radu Coravu
<oXygen/> XML Editor
http://www.oxygenxml.com
<oXygen/> XML Editor
http://www.oxygenxml.com
Return to “SDK-API, Frameworks - Document Types”
Jump to
- Oxygen XML Editor/Author/Developer
- ↳ Feature Request
- ↳ Common Problems
- ↳ DITA (Editing and Publishing DITA Content)
- ↳ SDK-API, Frameworks - Document Types
- ↳ DocBook
- ↳ TEI
- ↳ XHTML
- ↳ Other Issues
- Oxygen XML Web Author
- ↳ Feature Request
- ↳ Common Problems
- Oxygen Content Fusion
- ↳ Feature Request
- ↳ Common Problems
- Oxygen JSON Editor
- ↳ Feature Request
- ↳ Common Problems
- Oxygen PDF Chemistry
- ↳ Feature Request
- ↳ Common Problems
- Oxygen Feedback
- ↳ Feature Request
- ↳ Common Problems
- Oxygen XML WebHelp
- ↳ Feature Request
- ↳ Common Problems
- XML
- ↳ General XML Questions
- ↳ XSLT and FOP
- ↳ XML Schemas
- ↳ XQuery
- NVDL
- ↳ General NVDL Issues
- ↳ oNVDL Related Issues
- XML Services Market
- ↳ Offer a Service