Installing ORDS (without APEX) - oracle

I'm having difficulties getting ORDS 3.0.4.60.12.48 to work on a Tomcat 7.0.68 server. The database itself is Oracle 12.1.0.2.0.
Whenever I try to access the ORDS page at localhost:8080/ords, I'm getting a 404 error. After enabling the debug.printDebugToScreen property, the page is displaying the following:
Debug Trace
Could not find any dispatcher to handle request:
--Attributes--
apex.diagnostic.context = ...
ECID-Principal = ECIDPrincipal [ecid=DRfgpsk1Jpq7KZ67hEo6Dw..]
oracle.dbtools.http.ecid = ogil1RMV3372zbyEOpN1Rg..
oracle.dbtools.common.di.Services = Request Scope
--Attributes--
GET /ords/ HTTP/1.1
Host: localhost
host: localhost:8080
user-agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0
accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
accept-language: en-US,en;q=0.5
accept-encoding: gzip, deflate
referer: http://localhost:8080/manager/html/list
connection: keep-alive
org.apache.catalina.connector.CoyoteInputStream#139aac67
Stack Trace
DispatcherNotFoundException [statusCode=404, reasons=[]]
at oracle.dbtools.http.entrypoint.Dispatcher.choose(Dispatcher.java:86)
at oracle.dbtools.http.entrypoint.Dispatcher.dispatch(Dispatcher.java:96)
at oracle.dbtools.http.entrypoint.EntryPoint$FilteredServlet.service(EntryPoint.java:153)
at oracle.dbtools.http.filters.FilterChainImpl.doFilter(FilterChainImpl.java:73)
at oracle.dbtools.http.forwarding.QueryFilteringRewrite.doFilter(QueryFilteringRewrite.java:89)
at oracle.dbtools.http.filters.HttpFilter.doFilter(HttpFilter.java:45)
at oracle.dbtools.http.filters.FilterChainImpl.doFilter(FilterChainImpl.java:64)
at oracle.dbtools.http.forwarding.ForwardingFilter.doFilter(ForwardingFilter.java:59)
at oracle.dbtools.http.filters.HttpFilter.doFilter(HttpFilter.java:45)
at oracle.dbtools.http.filters.FilterChainImpl.doFilter(FilterChainImpl.java:64)
at oracle.dbtools.http.cors.CORSPreflightFilter.doFilter(CORSPreflightFilter.java:67)
at oracle.dbtools.http.filters.HttpFilter.doFilter(HttpFilter.java:45)
at oracle.dbtools.http.filters.FilterChainImpl.doFilter(FilterChainImpl.java:64)
at oracle.dbtools.http.cookies.auth.CookieSessionCSRFFilter.doFilter(CookieSessionCSRFFilter.java:73)
at oracle.dbtools.http.filters.HttpFilter.doFilter(HttpFilter.java:45)
at oracle.dbtools.http.filters.FilterChainImpl.doFilter(FilterChainImpl.java:64)
at oracle.dbtools.http.auth.AuthenticationFilter.authenticate(AuthenticationFilter.java:89)
at oracle.dbtools.http.auth.AuthenticationFilter.doFilter(AuthenticationFilter.java:62)
at oracle.dbtools.http.filters.HttpFilter.doFilter(HttpFilter.java:45)
at oracle.dbtools.http.filters.FilterChainImpl.doFilter(FilterChainImpl.java:64)
at oracle.dbtools.url.mapping.filter.URLMappingFilter.doFilter(URLMappingFilter.java:69)
at oracle.dbtools.http.filters.FilterChainImpl.doFilter(FilterChainImpl.java:64)
at oracle.dbtools.http.locale.LocaleFilter.doFilter(LocaleFilter.java:60)
at oracle.dbtools.http.filters.HttpFilter.doFilter(HttpFilter.java:45)
at oracle.dbtools.http.filters.FilterChainImpl.doFilter(FilterChainImpl.java:64)
at oracle.dbtools.http.cors.CORSResponseFilter.doFilter(CORSResponseFilter.java:83)
at oracle.dbtools.http.filters.HttpResponseFilter.doFilter(HttpResponseFilter.java:45)
at oracle.dbtools.http.filters.FilterChainImpl.doFilter(FilterChainImpl.java:64)
at oracle.dbtools.http.errors.ErrorPageFilter.doFilter(ErrorPageFilter.java:75)
at oracle.dbtools.http.filters.HttpFilter.doFilter(HttpFilter.java:45)
at oracle.dbtools.http.filters.FilterChainImpl.doFilter(FilterChainImpl.java:64)
at oracle.dbtools.http.ecid.ECIDFilter.doFilter(ECIDFilter.java:35)
at oracle.dbtools.http.filters.HttpFilter.doFilter(HttpFilter.java:45)
at oracle.dbtools.http.filters.FilterChainImpl.doFilter(FilterChainImpl.java:64)
at oracle.dbtools.http.auth.ForceAuthFilter.doFilter(ForceAuthFilter.java:44)
at oracle.dbtools.http.filters.HttpFilter.doFilter(HttpFilter.java:45)
at oracle.dbtools.http.filters.FilterChainImpl.doFilter(FilterChainImpl.java:64)
at oracle.dbtools.http.filters.Filters.filter(Filters.java:47)
at oracle.dbtools.http.entrypoint.EntryPoint.service(EntryPoint.java:82)
at oracle.dbtools.http.entrypoint.EntryPointServlet.service(EntryPointServlet.java:49)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at oracle.dbtools.rt.web.HttpEndpointBase.dispatchableServices(HttpEndpointBase.java:156)
at oracle.dbtools.rt.web.HttpEndpointBase.service(HttpEndpointBase.java:85)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:436)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
Unfortunately, I didn't really find a whole lot of info online about this. A lot of it was checking APEX specific users which I'm not using. Of what I did find, I already checked and can confirm that I can log in as ORDS_PUBLIC_USER manually, and I've tried copying the ojdbc.jar files from my Oracle client to the Tomcat lib folder. However, the problem seems to persist.
Any help would be appreciated!
[Edit] So I tried reinstalling it with a fresh ORDS configuration and realized that my installation did not have an apex_pu.xml file in the ords\conf\ directory. However, I'm still getting a similar error:
Debug Trace
mapped request using: /* to: apex_pu
Could not find any dispatcher to handle request:
--Attributes--
apex.diagnostic.context = ...
ECID-Principal = ECIDPrincipal [ecid=wDuKj9PEUNnl3Oy8vwesDg..]
oracle.dbtools.http.ecid = xXACfwD3YDNtXCQUNuqIAw..
oracle.dbtools.common.di.Services = Request Scope
--Attributes--
GET /ords/ HTTP/1.1
Host: localhost
host: localhost:8080
user-agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0
accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
accept-language: en-US,en;q=0.5
accept-encoding: gzip, deflate
referer: http://localhost:8080/manager/html/list
connection: keep-alive
org.apache.catalina.connector.CoyoteInputStream#1405a57f
mapped request using: /* to: apex_pu
Could not find any dispatcher to handle request:
--Attributes--
apex.diagnostic.context = ...
ECID-Principal = ECIDPrincipal [ecid=wDuKj9PEUNnl3Oy8vwesDg..]
oracle.dbtools.http.ecid = xXACfwD3YDNtXCQUNuqIAw..
oracle.dbtools.common.di.Services = Request Scope
--Attributes--
GET /ords/ HTTP/1.1
Host: localhost
host: localhost:8080
user-agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0
accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
accept-language: en-US,en;q=0.5
accept-encoding: gzip, deflate
referer: http://localhost:8080/manager/html/list
connection: keep-alive
org.apache.catalina.connector.CoyoteInputStream#1405a57f
The stack trace is near identical to before.

This was all a mistunderstanding on my part. I had assumed that localhost:8080/ords and localhost:8080/ords/ordstest should have returned some sort of metadata, but it doesn't look like that was the case.
After following the getting-started guide in the examples folder from ORDS to setting up an ORDSTEST schema and running
exec ords.enable_schema();
exec ords.enable_object(p_object => 'EMP');
commit;
in lieu of not wanting to download SQL Developer, I managed to get http://localhost:8080/ords/ordstest/emp to successfully return data.

Related

Oracle APEX ORDS upgrade causing 404 error with links

Sys admins just upgraded from OHS to ORDS. I am not familiar with ORDS. I just do some Oracle APEX work. We have some links that open up .pdf files and we are getting 404 errors. We enabled the debug trace but I am not getting anywhere with this. Any ideas on what could be causing the problem?
Running: APEX Version: 19.2.0.00.18
ORDS Version: 20.4.3.r0501904
Here is the debug trace:
[TE] url-mapping start: 2023-02-07T22:40:53.255943269Z duration: 0ms
Could not find any dispatcher to handle request:
--Attributes--
oracle.dbtools.http.servlet.UriRequest = UriRequest [uri=https://www.test.com/vmdbagnt/plsql/Gate_Keeper.Get_Drawing_File/DART/CHRISORDS/J/2B945/17-JAN-2023/pg1/drawings/2B945_CHRISORDS_J.PDF, contextPath=/vmdbagnt/plsql]
oracle.dbtools.http.ecid = undX91G7JdD8dh5ZbntHtw
oracle.dbtools.common.di.Services = URL Mapped Scope
oracle.dbtools.plugin.api.di.InstanceLocator = URL Mapped Scope
--Attributes--
GET [/vmdbagnt/plsql]/Gate_Keeper.Get_Drawing_File/DART/CHRISORDS/J/2B945/17-JAN-2023/pg1/drawings/2B945_CHRISORDS_J.PDF HTTP/1.1
Host: www.test.com
host: www.test.com
connection: keep-alive
sec-ch-ua: "Not_A Brand";v="99", "Google Chrome";v="109", "Chromium";v="109"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
upgrade-insecure-requests: 1
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
sec-fetch-site: same-origin
sec-fetch-mode: navigate
sec-fetch-user: ?1
sec-fetch-dest: document
referer: https://www.test.com/vmdbx/f?p=DART:QUERY:11551677945868::NO:::
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9
cookie: _ga=GA1.2.2088229043.1633182967; _4c_=fVFNj5swFPwrK59jMMb4I7dqK7W9VHupekRgnMW7BCPbgaar%2FPc%2BJySRNlKRQH7DvPF7Mx9o6c2ItgUvy0IyWlWiUBv0bo4BbT%2BQntJ3Tp%2BDH9AW9TFOYZvny7JkYxOa7NXNedO6Q8x7%2B9oP8MaQf3%2BpX7ydG33M%2Brgf0AZp1xloL1QmMwF1%2FAsVLgmB8%2BRdd9CxjscpcRbTPoXuHX50Zrba1IvtYn9upuSO9ibdlWAiz%2FDkUwGnxY6dWz63reitTRX0LDbY2fhjHbwGcHSjAbQ1sYHqZzp6twSTpJ977%2FbmSTFAHbiDfp8VA5Te7Iz3Z9bVIBsCTia9BX03CqjBxrTkFVoR8HsF8QWcwHOUbhqcbobUASkB1%2BhoHeSF9o1NwLcv9a8fX6GmREpKFWFldsmSKi7QaYP%2BXMKlgvCKESHB%2BwhJSs5IeoDhbbemjGRHy1IUBvOWSMy0UbjlTYuZ7LTYacl3lKNVkxFVScVlxSiIzPaqQU3blkZwXDVFiZkQOyxJ2WDNWkMp75jgBN3mKiQnMBdX61yFvI41DaticScrUcKFil%2FJ7LbENK9s9rCyeFz5kmry8D99D1adTv8A; __utma=259910805.2088229043.1633182967.1651074519.1651074519.1; CFID=Zj3v2hrl7z9lq9mgcvittenrtbn7k0cm07xmisu1ajz3hpbnbe-284129; CFTOKEN=Zj3v2hrl7z9lq9mgcvittenrtbn7k0cm07xmisu1ajz3hpbnbe-59216697; LastMRH_Session=f101ed89; SBXSESSION=uz83F3fZLTbgcDGNHQtc4qT20jqtPU0/wMl+v1vN2yz7sWYmagMLVxox0KS99a3hVR4pUNbABLeTUxKGzjNTC78JZd39NoBuxMb+ED6fAKiNCfOVZJSGM2hn4CHb0X+VeSD40Pg+fqRvMiXnPcOhUA9FFixRQvHqjEbt1SOYLYy16vv0NMeUboTF0sfq5cKlwXkiPp9kTQhmgAPEzYidL9kzsXIncYf+Qc7ElNxA6VYzAiEACwIY2+yNXe6Qi6nMlUhJ6aDL44mVwrEZ/1yZ0n+TwVujlyKgJk4Mas7Hog/47cS7AyACm8aTtVP0PQskr1rCQm+1/8uutjM4JPeVQodFbX67y4z5i7iKOx1JjOAfQ0QtfF4ow8c7IYAUnp9F9KsXj9q8aCLQzEnxH3tXDK7HRbU4o9Hqxey4oxwf2weOPBX3bEkv8QreODTu3sjACxFZdtOKVNE9rhM85L8BJ+yuYuyTgbY3NX4gFITAdymjF6nVSsMi2u5VBMJd1+4OqXkhh9frb47HvWhXCylh+EM8iuY6PKRrvPmP1ujm3vt7GrOGu48AKjrWY061bVfONmQyIPU/UzfZHBwZcLvGifxe0DRbcE/4qP0FuiKke4qhZwEX46DdW6kEJVXI+tRcmbKxcOh3vhkNwFjpdpm5S0+HlmzQUQmDh0rbAV7g4Aq73IwmmrbfwMjKockLvJio8KF0NHErGPYBJbnOCPRywZDI4374GQDWCHqm7f4fMki+4P46VRWKkf8zXjXQDXnsIHHDKKwjdqfw7oZp5cgfxUwKbDV65sttaezyRQVpftDUknEBEJqxWLNTmUC260a1VuDmqx7TZKiDDWDNMqGKb7+U5Hobac/oQzgz33CHJ9C0pQqQ1kgypj7ottXr/SyVv+Mc6yBltBXcV1HLAabVzP0wwiOfpEM02iMAXScoasGaV9K5jTeje0JizQpVEWPPdUc5VmEknJRJU3otLA8ntos1Tnie71fbkIlXLEx47ZXmVCRkj7mQ/9SrSk+Q46N149hPSKVbdGMmT8Lod4OLySZK2ngyRfsRMXjoX7QpobJhEF1OUDhVxzkskrlq0Eti; F5_ST=1z1z1z1675807062z604800; iss-BigIP-sb=1543700746.42271.0000; SMSESSION=eQG4Qu3lBCY7iV2l0bZ9sQ248+0NFAckScam6d2rOfDYPBrzLo7V3AHXLDN8NBWdDO0K/bj7TMgF+poT+sYVLGcQkhD8lueg3P+wOdjMH3qj753cKKAljgENSnSCbVoY1QPjiGkvuJPWWfcFHnZw88qQVymiqGMalxdYpd1JGExp85pCQW/wL3/9bZJwRKpMWgzt4hEq7Eoe1edfcUdXbQx2bP9UtZx53YTQu7isMP2JUctCRXQDC/rU3WFiiXOqMaJMW2K/xC//9bWtf+WlmOStFg1f5vUwrZcTqT/1I5JUJzSc/MgR8JG3KYa64KcX2d7hfPxiHeKn7eFVN6oPCkK1bWFtb96z93llPF52mkPqly9XF/4/C2epvkjxetYCa/cVI/yQwXrY90yaLvqMWWjshMniLzql+oWwEJgN7kxo3p1/ERMapq/2IjWRwC9pmPhc531nOU6WzZyqo79z8snbwMElHkdzXT62y8O2KKJia5vBaE/M7MuGvUTZgDV5yOmsAqLfbO6WaCXaI803G+8CskiNG7hCkqkWfGj//yxMMYxlGjPwaAn58BzMV6hnkDUAmauip3L330Jn0yARGou10nmtQFgUjy7TADi309mI8dwFbom5f1YdP7Ps3+MbaavK4ZsNFU/Eu2pZvmF52jSHA7OaquRszOoNx4bgQhuCSBQys5XtI3pRimo7Jgl8jakWfYWtRUUr/ZZdmrwJRwZP75Onb7KtP1f02OINNHVUOehgscQikiXLtJYZvkEz/aZaZGB0+Kc5JxTfcThm1LyIXLwnmqf8U8zvISHJqTSYFZ9tfl03VzI4B5wZ302C9hb2YtyVEP0I20NXaFir8Ub3/7RV+7aPgvQiiHmF+4idx14icVcTWoIt2Omp/8a7MM7gI/ce/SNBkaN39bhpd3XP8ynC0GAHZx9/BL3Rjjum8Inh3u5NYuPfSAsmHAaF+tNvB0FjoVDx6yucrfMelwIAoYh07hfpK25aZHCd3wl8JYWnCS8BXC9mXcnL2zLqGVwZB0HqgBX8zvNimxNx7yZUh5Y3QmfwKNl7mnZkw2tcGmrK+y2r23hzJSLkIZho
x-forwarded-for: 129.50.109.4'
DispatcherNotFoundException [statusCode=404, logLevel=FINER, reasons=[]]
at oracle.dbtools.http.entrypoint.Dispatcher.choose(Dispatcher.java:78)
at oracle.dbtools.http.entrypoint.Dispatcher.dispatch(Dispatcher.java:89)
at oracle.dbtools.http.entrypoint.EntryPoint$FilteredServlet.service(EntryPoint.java:170)
at oracle.dbtools.http.filters.FilterChainImpl.doFilter(FilterChainImpl.java:73)
at oracle.dbtools.http.forwarding.QueryFilteringRewrite.doFilter(QueryFilteringRewrite.java:90)
at oracle.dbtools.http.filters.HttpFilter.doFilter(HttpFilter.java:47)
at oracle.dbtools.http.filters.FilterChainImpl.doFilter(FilterChainImpl.java:64)
at oracle.dbtools.http.forwarding.ForwardingFilter.doFilter(ForwardingFilter.java:68)
at oracle.dbtools.http.filters.HttpFilter.doFilter(HttpFilter.java:47)
at oracle.dbtools.http.filters.FilterChainImpl.doFilter(FilterChainImpl.java:64)
at oracle.dbtools.http.cors.CORSPreflightFilter.doFilter(CORSPreflightFilter.java:68)
at oracle.dbtools.http.filters.HttpFilter.doFilter(HttpFilter.java:47)
at oracle.dbtools.http.filters.FilterChainImpl.doFilter(FilterChainImpl.java:64)
at oracle.dbtools.http.cookies.auth.CookieSessionCSRFFilter.doFilter(CookieSessionCSRFFilter.java:75)
at oracle.dbtools.http.filters.HttpFilter.doFilter(HttpFilter.java:47)
at oracle.dbtools.http.filters.FilterChainImpl.doFilter(FilterChainImpl.java:64)
at oracle.dbtools.http.auth.AuthenticationFilter.authenticate(AuthenticationFilter.java:101)
at oracle.dbtools.http.auth.AuthenticationFilter.doFilter(AuthenticationFilter.java:64)
at oracle.dbtools.http.filters.HttpFilter.doFilter(HttpFilter.java:47)
at oracle.dbtools.http.filters.FilterChainImpl.doFilter(FilterChainImpl.java:64)
at oracle.dbtools.url.mapping.RequestMapperImpl.doFilter(RequestMapperImpl.java:158)
at oracle.dbtools.url.mapping.URLMappingBase.doFilter(URLMappingBase.java:86)
at oracle.dbtools.url.mapping.db.DatabaseTenantMapping.dispatchSelf(DatabaseTenantMapping.java:189)
at oracle.dbtools.url.mapping.db.DatabaseTenantMappingBase.doFilter(DatabaseTenantMappingBase.java:50)
at oracle.dbtools.url.mapping.defaultpool.LegacyDatabaseTenantMapping.doFilter(LegacyDatabaseTenantMapping.java:46)
at oracle.dbtools.url.mapping.tenant.TenantMappingDispatcher.dispatch(TenantMappingDispatcher.java:52)
at oracle.dbtools.url.mapping.tenant.TenantMappingFilter.doFilter(TenantMappingFilter.java:75)
at oracle.dbtools.http.filters.HttpFilter.doFilter(HttpFilter.java:47)
at oracle.dbtools.http.filters.FilterChainImpl.doFilter(FilterChainImpl.java:64)
at oracle.dbtools.http.forwarding.ForwardingFailedFilter.doFilter(ForwardingFailedFilter.java:41)
at oracle.dbtools.http.filters.HttpFilter.doFilter(HttpFilter.java:47)
at oracle.dbtools.http.filters.FilterChainImpl.doFilter(FilterChainImpl.java:64)
at oracle.dbtools.http.auth.external.ExternalSessionFilter.doFilter(ExternalSessionFilter.java:59)
at oracle.dbtools.http.filters.HttpFilter.doFilter(HttpFilter.java:47)
at oracle.dbtools.http.filters.FilterChainImpl.doFilter(FilterChainImpl.java:64)
at oracle.dbtools.rt.authentication.apex.ApexSessionQueryRewriteFilter.doFilter(ApexSessionQueryRewriteFilter.java:58)
at oracle.dbtools.http.filters.HttpFilter.doFilter(HttpFilter.java:47)
at oracle.dbtools.http.filters.FilterChainImpl.doFilter(FilterChainImpl.java:64)
at oracle.dbtools.http.cors.CORSResponseFilter.doFilter(CORSResponseFilter.java:90)
at oracle.dbtools.http.filters.HttpResponseFilter.doFilter(HttpResponseFilter.java:45)
at oracle.dbtools.http.filters.FilterChainImpl.doFilter(FilterChainImpl.java:64)
at oracle.dbtools.http.filters.AbsoluteLocationFilter.doFilter(AbsoluteLocationFilter.java:65)
at oracle.dbtools.http.filters.HttpResponseFilter.doFilter(HttpResponseFilter.java:45)
at oracle.dbtools.http.filters.FilterChainImpl.doFilter(FilterChainImpl.java:64)
at oracle.dbtools.http.auth.external.ExternalAccessValidationFilter.doFilter(ExternalAccessValidationFilter.java:59)
at oracle.dbtools.http.filters.HttpFilter.doFilter(HttpFilter.java:47)
at oracle.dbtools.http.filters.FilterChainImpl.doFilter(FilterChainImpl.java:64)
at oracle.dbtools.http.errors.ErrorPageFilter.doFilter(ErrorPageFilter.java:87)
at oracle.dbtools.http.filters.HttpFilter.doFilter(HttpFilter.java:47)
at oracle.dbtools.http.filters.FilterChainImpl.doFilter(FilterChainImpl.java:64)
at oracle.dbtools.http.secure.ForceHttpsFilter.doFilter(ForceHttpsFilter.java:74)
at oracle.dbtools.http.filters.HttpFilter.doFilter(HttpFilter.java:47)
at oracle.dbtools.http.filters.FilterChainImpl.doFilter(FilterChainImpl.java:64)
at oracle.dbtools.http.auth.ForceAuthFilter.doFilter(ForceAuthFilter.java:44)
at oracle.dbtools.http.filters.HttpFilter.doFilter(HttpFilter.java:47)
at oracle.dbtools.http.filters.FilterChainImpl.doFilter(FilterChainImpl.java:64)
at oracle.dbtools.http.filters.Filters.filter(Filters.java:67)
at oracle.dbtools.http.entrypoint.EntryPoint.service(EntryPoint.java:70)
at oracle.dbtools.http.entrypoint.EntryPointServlet.service(EntryPointServlet.java:125)
at oracle.dbtools.entrypoint.WebApplicationRequestEntryPoint.service(WebApplicationRequestEntryPoint.java:50)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
at ApmCamsValve.invoke(ApmCamsValve.java:78)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1789)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:833)
My first answer would be... why don't you ask the sys admins instead of some strangers on a forum ? They probably followed the docs (https://docs.oracle.com/en/database/oracle/oracle-rest-data-services/22.4/orddg/migrating-mod_plsql-ords.html)
Then... read the logs. Even if you don't know ORDS, it gives you a lot of information.
In the logs it is visible that the referrer url is "https://www.test.com/vmdbx/f?p=DART:QUERY:11551677945868::NO:::", that is your apex url, and the path is "vmdbx". But the request is to a url that looks like this "https://www.test.com/vmdbagnt/plsql/Gate_Keeper.Get_Drawing_File/DART/CHRISORDS/J/2B945/17-JAN-2023/pg1/drawings/2B945_CHRISORDS_J.PDF". In that url the path is "vmdbagnt/plsql". My guess is that this path was configured in OHC but doesn't exist yet/is named differently in ORDS
A pl/sql gateway needs to be configured in ORDS, just like it was configured in OHC. That means you'll tell ords: "if I give you this path, then connect to the database as that user and execute the procedure". This could already be done if the migration was done correctly but it might require some changes on your part because the path for the pl/sql gateway is no longer "vmdbagnt/plsql". But... only the sysadmins have that information.

Can't send http/2 request in Gatling

I've got a problem using gatling tool when trying to send http/2 request.
I've enable http/2 setting in protocol settings, even added mapping to make sure that client will communicate with server using http2 but still request is send using http/1.1.
In console output you'll see that server can communicate using http2 but for some reason request are sent only with http 1.1.
All headers are written according to the ones from browser.
Could someone help me please with this issue?
package test
import scala.concurrent.duration._
import io.gatling.core.Predef._
import io.gatling.http.Predef._
import io.gatling.jdbc.Predef._
class RecordedSimulation extends Simulation {
val httpProtocol = http
.baseUrl("https://sitename")
.inferHtmlResources(BlackList(""".*\.js""", """.*\.css""", """.*\.gif""", """.*\.jpeg""", """.*\.jpg""", """.*\.ico""", """.*\.woff""", """.*\.woff2""", """.*\.(t|o)tf""", """.*\.png""", """.*detectportal\.firefox\.com.*"""), WhiteList())
.acceptHeader("*/*")
.acceptEncodingHeader("gzip, deflate")
.acceptLanguageHeader("en-US,en;q=0.5")
.userAgentHeader("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:85.0) Gecko/20100101 Firefox/85.0")
.enableHttp2
.http2PriorKnowledge(Map("sitename" -> true))
.disableCaching
.disableWarmUp
val headers_0 = Map(
"Accept" -> "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Cache-Control" -> "max-age=0",
"sec-fetch-dest" -> "document",
"sec-fetch-mode" -> "navigate",
"sec-fetch-site" -> "none",
"sec-fetch-user" -> "?1",
"Upgrade-Insecure-Requests" -> "1")
val scn = scenario("RecordedSimulation")
.exec(http("request_0")
.get("/auth?r=%2F&m=NOT_AUTHENTICATED")
.headers(headers_0))
.pause(2)
setUp(scn.inject(atOnceUsers(1))).protocols(httpProtocol)
}
In console I see next:
DEBUG io.gatling.http.client.impl.DefaultHttpClient - ALPN led to HTTP/2 with remote sitename
DEBUG io.gatling.http.client.impl.Http2AppHandler - Write request WritableRequest{request=DefaultFullHttpRequest(decodeResult: success, version: HTTP/1.1, content: UnpooledByteBufAllocator$InstrumentedUnpooledUnsafeHeapByteBuf(ridx: 0, widx: 0, cap: 0))
GET https://sitename/auth?r=%2F&m=NOT_AUTHENTICATED HTTP/1.1
sec-fetch-site: none
Upgrade-Insecure-Requests: 1
If-Modified-Since: Fri, 29 Jan 2021 06:40:06 GMT
sec-fetch-dest: document
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Cache-Control: max-age=0
accept-encoding: gzip, deflate
If-None-Match: "1d6f60994776ee0"
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:85.0) Gecko/20100101 Firefox/85.0
accept-language: en-US,en;q=0.5
sec-fetch-mode: navigate
sec-fetch-user: ?1
accept: */*
Those are internal Gatling logs. We use Netty in a way that it converts HTTP/1.1 payloads into HTTP/2 ones.
From the logs you provided, it looks that Gatling is correctly using HTTP/2 here.

WebSocket handshake Error with caddy proxy

I'm trying to initiate a websocket connection between chrome browser client and server.
Overview of my implementation :
There are set of different up and running projects. The main project is the hub to all other projects and it handle all http requests, routes and proxy to other sub projects. These all projects use load balancers. My attempt is to create a websocket connection from chrom browser to one sub project.
caddy version : 0.9.3
websocket library : github.com/gorilla/websocket
The main project's caddy configs :
https://{$DOMAIN_NAME}/analytics/ {
tls ../resources/security/server.pem ../resources/security/server.key
proxy / https://localhost:8107/analytics {
websocket
insecure_skip_verify
}
}
The sub project's caddy configs :
localhost:{$ANALYTICS_CADDY_PORT}/analytics {
root webapps/analytics
gzip
ext .html
tls {$ANALYTICS_CERTIFICATE_FILE} {$ANALYTICS_KEY_FILE}
proxy /api https://localhost:{$ANALYTICS_HTTPS_PORT} {
websocket
insecure_skip_verify
}
}
Inside the analytics sub project, " /api/ws " would trigger CreateSocketConnection() method.
//Starting the API server
router := routes.NewRouter()
http.Handle("/", router)
http.HandleFunc("/api/ws", api.CreateSocketConnection)
CreateSocketConnection implementation :
func CreateSocketConnection(w http.ResponseWriter, r *http.Request) {
var upgrader = websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
}
_, err = upgrader.Upgrade(w, r, nil)
if err != nil {
log.Fatal("upgrader failed :", err.Error())
}
//controllers.HandleSocket(ws)
}
Client side implementation :
conn = new WebSocket("wss://xxxx.com/analytics/api/ws");
Issue is I'm not getting any error log in backend, but the socket connection fails on browser.
WebSocket connection to 'wss://xxxx.com/analytics/api/ws' failed: Error during WebSocket handshake: Unexpected response code: 502
Request header :
Accept-Encoding:gzip, deflate, sdch, br
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:Upgrade
Cookie:username=admin; tenantid=1; tenantdomain=super.com;
DNT:1
Host:xxxx.com
Origin:https://xxxx.com
Pragma:no-cache
Sec-WebSocket-Extensions:permessage-deflate; client_max_window_bits
Sec-WebSocket-Key:O/DS1lRHzXptoWz5WR131A==
Sec-WebSocket-Version:13
Upgrade:websocket
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36
But the response header is as follows :
Content-Encoding:gzip
Content-Length:40
Content-Type:text/plain; charset=utf-8
Date:Sat, 29 Oct 2016 03:13:23 GMT
Server:Caddy
Vary:Accept-Encoding
X-Content-Type-Options:nosniff
Please note that I'm getting the request header inside the CreateSocketConnection method as follows :
map[
Connection:[Upgrade]
X-Forwarded-For:[127.0.0.1, 127.0.0.1] Dnt:[1]
Origin:[https://xxxx.com]
Pragma:[no-cache]
Sec-Websocket-Extensions:[permessage-deflate; client_max_window_bits]
Sec-Websocket-Version:[13]
Accept-Encoding:[gzip]
User-Agent:[Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36]
Cache-Control:[no-cache]
Sec-Websocket-Key:[O/DS1lRHzXptoWz5WR131A==]
Upgrade:[websocket]
Cookie:[username=admin; tenantid=1; tenantdomain=super.com; ]
Accept-Language:[en-US,en;q=0.8]]
Am I missing something in my implementation?
Thanks in advance
I had a similar issue, what I was missing was the transparent tag.
Ex.
https://{$DOMAIN_NAME}/analytics/ {
tls ../resources/security/server.pem ../resources/security/server.key
proxy / https://localhost:8107/analytics {
transparent
websocket
insecure_skip_verify
}
}
transparent specifies that all the headers should be sent with it, so this matters if you have authentication.
transparent:
Passes thru host information from the original request as
most backend apps would expect. Shorthand for:
header_upstream Host {host}
header_upstream X-Real-IP {remote} header_upstream X-Forwarded-For {remote}
header_upstream X-Forwarded-Port {server_port}
header_upstream X-Forwarded-Proto {scheme}
Source: https://caddyserver.com/docs/proxy

Tyrus websocket server handshake issue?

I followed the User Guide available here : i added this in my pom :
<dependency>
<groupId>org.glassfish.tyrus</groupId>
<artifactId>tyrus-server</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.glassfish.tyrus</groupId>
<artifactId>tyrus-container-grizzly</artifactId>
<version>1.2</version>
</dependency>
I wrote this in my main class :
Server server = new Server("localhost", 8624, "/", EchoEndPoint.class);
try
{
server.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Please press a key to stop the server.");
reader.readLine();
}
catch(Exception ex) { ex.printStackTrace(); }
finally
{
server.stop();
}
The content of my EchoEndPoint class is the same as described in the guide.
I tried to connect to this with a HTML5 websocket :
var ws = new WebSocket("ws://localhost:8624/echo");
It seems that, browser side, it doesn't connect (it calls the onClose callback directly). And, server side, i get this in the console :
Grave: Invalid Connection header returned: 'keep-alive'
org.glassfish.tyrus.websockets.HandshakeException: Invalid Connection header returned: 'keep-alive'
at org.glassfish.tyrus.websockets.HandShake.validate(HandShake.java:254)
at org.glassfish.tyrus.websockets.HandShake.checkForHeader(HandShake.java:246)
at org.glassfish.tyrus.websockets.HandShake.<init>(HandShake.java:97)
at org.glassfish.tyrus.websockets.draft06.HandShake06.<init>(HandShake06.java:63)
[...]
org.glassfish.grizzly.filterchain.DefaultFilterChain execute
Avertissement: Exception during FilterChain execution
java.lang.ClassCastException: org.glassfish.grizzly.http.HttpContent cannot be cast to org.glassfish.tyrus.websockets.DataFrame
at org.glassfish.tyrus.container.grizzly.WebSocketFilter.handleWrite(WebSocketFilter.java:330)
If it's of any help, i copy the request header caught with the browser inspector :
GET /echo HTTP/1.1
Host: localhost:8624
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0 FirePHP/0.7.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Sec-WebSocket-Version: 13
Origin: null
Sec-WebSocket-Key: yhGPwJ26c5fYEZ5/abvtqw==
x-insight: activate
Connection: keep-alive, Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Is this a handshake problem ?
EDIT : i've tried in Chrome (28.0.1500.72) and it's working. Maybe the issue comes from Firefox when it builds the header ?
Tyrus is complaining about the Connection: keep-alive, Upgrade header.
Firefox isn't doing anything wrong here.
Tyrus is being too restrictive and not following the WebSocket Spec (RFC-6455) with regards to how to handle the Connection header.
The RFC states in Section 4.1:
6. The request MUST contain a |Connection| header field whose value
MUST include the "Upgrade" token.
and
3. If the response lacks a |Connection| header field or the
|Connection| header field doesn't contain a token that is an
ASCII case-insensitive match for the value "Upgrade", the client
MUST _Fail the WebSocket Connection_.
This seems like a bug in Tyrus.

GWT, why CellTable doesn't show Image when running in Eclipse?

I have the code:
ClickableTextCell imageCell = new ClickableTextCell() {
#Override
public void render(Context context, SafeHtml data, SafeHtmlBuilder sb) {
if (data != null) {
String imagePath = "contact.jpg";
//sb.appendEscaped(imagePath);
sb.appendHtmlConstant("<img width=\"20\" src=\"" + imagePath + "\">");
}
}
};
Column<List<String>,String> imageColumn = new Column<List<String>,String>(imageCell) {
#Override
public String getValue(List<String> object) {
return "";
}
};
imageColumn.setFieldUpdater(new FieldUpdater<List<String>, String>() {
#Override
public void update(int index, List<String> object, String value) {
//Window.alert("You clicked " + object.get(index));
}
});
table.addColumn(imageColumn, columnName);
But when running in Eclipse it doesn't show an image. The web server got this error:
Request headers
Host: 127.0.0.1:8888
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://127.0.0.1:8888/abc.html?gwt.codesvr=127.0.0.1:9997
Cookie: MYCOOKIE=htzjk7g2pva9; JSESSIONID=1xjqdxl3kuuxw; PRODUCTSERVICECOOKIE=1xjqdxl3kuuxw
Connection: keep-alive
Response headers
Set-Cookie: PRODUCTSERVICECOOKIE=1xjqdxl3kuuxw;Path=/
Content-Length: 1397
Content-Type: text/html; charset=iso-8859-1
[WARN] 404 - GET /contact.jpg (127.0.0.1) 1397 bytes
Request headers
Host: 127.0.0.1:8888
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-US,en;q=0.5
Also, the second question is where to put the Image so that when we deploy our final web app we can manage the image easily. I'm actually confused with the folder structures in Eclipse.
In MyProject, I have:
war\myproject
war\WEB-INF
war\MyProjet.css
war\MyProjet.html
But in MyProject I also have folder src which contains all java file
src\myproject\client\ (in client folder I put "contact.jpg"
src\myproject\server
I am not sure if I put the contact.jpg in the correct folder. Also, when we deploy our webapp, will Eclipse migrate all the image file into this folder:-->
war\myproject
If you place you image files in rc\myproject\public\img\contact.jpg folder then GWT will copy the files into your war\gwtmodulename\img\contact.jpg folder during compilation and you would need to code using GWT.getModuleBaseURL()+"img\"+"contact.jpg" as that gives you the location of image w.r.t your http:\\domain\war\gwtmodulename .
If you place you image files in war\img folder then you would need to code using GWT.getHostPageBaseURL()+"img\"+"contact.jpg" as that gives you the location of your image w.r.t yout http:\\domain\war\ .
Either:
Put your image in a public path. Static resources (such as images) in public path are automatically copied in the compiler output directory. To reference them in client code, you have to make them relative to GWT.getModuleBaseURL().
or
Use an ImageResource within a ClientBundle and use either:
imageResource.getSafeUri().asString() chain, to obtain its resolved (safe) URI; or
AbstractImagePrototype.create(imageResource).getHTML() for the whole <img> snippet.
I've excluded the new Image(imageResource).getUrl() option as it is useless for your use case (no need for an Image widget).
Also if you want to decorate a cell using an icon, take a look at IconCellDecorator, maybe somehow useful.

Resources