I'm calling a servlet through POST method and passing data. When i tried to hit the author/publish instance directly, its working as expected.
Whereas when I'm hitting the servlet through dispatcher, the request payload data is coming as EMPTY.
Please share your inputs on the same
Views
Replies
Total Likes
Hi @vijaymanoharan
Are you sure that the payload is empty and you are not getting a 404.
You get a 404 on dispatcher if servlet path is not allowed in the PUBLISH-FILTERS.
Can you please analyse the requests in network tab of dev-tools and post relevant screeenshots, so that we can guide further.
Thanks.
Hi @milind_bachani , the payload is coming as empty whereas the payload is a JSON which i'm passing.
Note: Im trying to hit the servlet through external server.
Hi @vijaymanoharan
Since you are hitting from external server, I suspect few things :
Thanks.
1.I have added clientheaders in dispatcher.
2.The request comes in from Adobe IO and the request looks like following,
Request URL: dispatcherURL/bin/notification
Request method: POST
Content-type: application/json; charset=utf-8
accept-encoding: deflate,compress,identity
user-agent: Adobe/1.0
x-adobe-delivery-id: xxx-xxx-xxxxx-xxxxxxx
x-adobe-event-code: pipeline_execution_start
x-adobe-event-id: xxx-xxx-xxxxx-xxxxxxx
x-adobe-provider: cloudmanager
x-adobe-retry-count: 86
x-adobe-signature: xxxxxxxxxxxxxxxxxxxxxxx
3. Tried hitting request through postman, getting 404 error for dispatcher and working fine with Author instance.
@vijaymanoharan
for #3, Can you also try hitting <publisher_url>/bin/notfication in Postman and check the response, or it also gives a 404 ?
Its giving 404 error and i have placed the trace of dispatcher below
[Fri Jan 07 08:25:11 2022] [D] [pid 6550] Found farm publishfarm for project.dev
[Fri Jan 07 08:25:11 2022] [D] [pid 6550] checking [/bin/notification]
[Fri Jan 07 08:25:11 2022] [D] [pid 6550] request URL has no extension: /bin/notification
[Fri Jan 07 08:25:11 2022] [D] [pid 6550] cache-action for [/bin/notification]: NONE
[Fri Jan 07 08:25:11 2022] [T] [pid 6550] Filter rule entry /005 allowed 'POST /bin/notification HTTP/1.1'
[Fri Jan 07 08:25:11 2022] [D] [pid 6550] Reusing connection: 10.44.1.98:4503
[Fri Jan 07 08:25:11 2022] [D] [pid 6550] Connected to backend 0 (10.44.1.98:4503)
[Fri Jan 07 08:25:11 2022] [T] [pid 6550] request.uri = "/bin/notification"
[Fri Jan 07 08:25:11 2022] [T] [pid 6550] request.headers[Content-Type] = "application/json; charset=utf-8"
[Fri Jan 07 08:25:11 2022] [T] [pid 6550] request.headers[Via] = "1.1 project.dev (dispatcher)"
[Fri Jan 07 08:25:11 2022] [T] [pid 6550] request.headers[X-Forwarded-For] = "10.44.1.98"
[Fri Jan 07 08:25:11 2022] [T] [pid 6550] request.headers[Server-Agent] = "Communique-Dispatcher"
[Fri Jan 07 08:25:11 2022] [T] [pid 6550] request.headers[Host] = "10.44.1.98:4503"
[Fri Jan 07 08:25:11 2022] [D] [pid 6550] Sending request body to remote server
[Fri Jan 07 08:25:11 2022] [D] [pid 6550] Request body sent to remote server
[Fri Jan 07 08:25:11 2022] [D] [pid 6550] No socket reuse: neither GET nor HEAD
[Fri Jan 07 08:25:11 2022] [I] [pid 6550] "POST /bin/notification" 500 none [publishfarm/0] 8ms
[Fri Jan 07 08:25:11 2022] [D] [pid 6550] Found farm publishfarm for project.dev
hi @vijaymanoharan
I would further like you to check that your servlet code has been deployed to publisher and you are able to resolve the servlet at :
<publisher_url>/system/console/servletresolver
add path /bin/notification choose method as POST and click on resolve and check what candidates say.
Also, I presume that you have added /bin path to execution paths in Apache Sling Servlet/Script Resolver and Error Handler config (in /system/console/configMgr)
The servlet path is resolving in servletresolver and /bin path is available under that particular config.
@vijaymanoharan Strange, it gets resolved on publisher but gives 404 on dispatcher - Is the dispatcher rendered from correct publisher ?
Check /renders on your dispatcher config.
What does the servlet url look like?
Can you please check the dispatcher any file for '/filter' section
For Eg: For /bin/test/myservlet /0001 { /type "allow" /url "/bin/test/myservlet*" }
Also we can check the dispatcher debug and trace logs if any information regarding this is noted.
Thanks
Hi @Shubham_borole ,
The dispatcher filter file allows the particular path.
The dispatcher.log shows the trace as follow
[Fri Jan 07 08:25:11 2022] [D] [pid 6550] Found farm publishfarm for project.dev
[Fri Jan 07 08:25:11 2022] [D] [pid 6550] checking [/bin/notification]
[Fri Jan 07 08:25:11 2022] [D] [pid 6550] request URL has no extension: /bin/notification
[Fri Jan 07 08:25:11 2022] [D] [pid 6550] cache-action for [/bin/notification]: NONE
[Fri Jan 07 08:25:11 2022] [T] [pid 6550] Filter rule entry /005 allowed 'POST /bin/notification HTTP/1.1'
[Fri Jan 07 08:25:11 2022] [D] [pid 6550] Reusing connection: 10.44.1.98:4503
[Fri Jan 07 08:25:11 2022] [D] [pid 6550] Connected to backend 0 (10.44.1.98:4503)
[Fri Jan 07 08:25:11 2022] [T] [pid 6550] request.uri = "/bin/notification"
[Fri Jan 07 08:25:11 2022] [T] [pid 6550] request.headers[Content-Type] = "application/json; charset=utf-8"
[Fri Jan 07 08:25:11 2022] [T] [pid 6550] request.headers[Via] = "1.1 project.dev (dispatcher)"
[Fri Jan 07 08:25:11 2022] [T] [pid 6550] request.headers[X-Forwarded-For] = "10.44.1.98"
[Fri Jan 07 08:25:11 2022] [T] [pid 6550] request.headers[Server-Agent] = "Communique-Dispatcher"
[Fri Jan 07 08:25:11 2022] [T] [pid 6550] request.headers[Host] = "10.44.1.98:4503"
[Fri Jan 07 08:25:11 2022] [D] [pid 6550] Sending request body to remote server
[Fri Jan 07 08:25:11 2022] [D] [pid 6550] Request body sent to remote server
[Fri Jan 07 08:25:11 2022] [D] [pid 6550] No socket reuse: neither GET nor HEAD
[Fri Jan 07 08:25:11 2022] [I] [pid 6550] "POST /bin/notification" 500 none [publishfarm/0] 8ms
[Fri Jan 07 08:25:11 2022] [D] [pid 6550] Found farm publishfarm for project.dev
Note: I'm trying to hit the servlet from external server
Do you have any other servlets that use the /bin based servlet resolutions and are working?
Yeah, they are working.
Even the same servlet works for GET Method.
I'm assuming is this something to do with the firewall which is blocking the data
Hi @vijaymanoharan - The dispatcher log shows 500 as the response code, are you sure that you see 404(not found) as response code? In case of 500, you need to look into error.log of your publish instance.
The error code 500 is coming because im trying to do operations with the payload data. due to which, 500 error code comes in @harish_malineni
@vijaymanoharan - OK!!
URL rewrite happens on the request before it get passed to dispatcher module. And this redirection will not carry the payload data. Please check, in browser console or using redirect trace(Chrome plugin) or in Apache redirect.log, whether the /bin/notification underwent any redirection. I suspect either of the below two redirects might have applied,
1. SSL force redirection, like below
ReWriteCond %{SERVER_PORT} !^443$ RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R=301,L]
2. A default passthrough (highly unlikely)
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [PT,L]
If none the above and the scenarios mentioned by @milind_bachani is causing the issue then try changing the servlet path. Or rather than path try registering the servlet with resourceType.
Views
Likes
Replies