softwaremill / softwaremill/elasticmq

Connection issue with proxy in Java

Open
#76 9 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Scala
Stars
2.9k
Forks
203
Avg merge
1d 7h
Merged PRs (30d)
6

Description

Hello,

I have an issue when connecting to the elasticmq queue when on my work proxy. It seems to work fine if I disconnect from the internet. But otherwise I get the following.

Exception

[Fatal Error] loose.dtd:31:3: The declaration for the entity "HTML.Version" must end with '>'.
2016-08-23 12:44:10.282  INFO 14543 --- [pool-1-thread-1] c.a.http.DefaultErrorResponseHandler     : Unable to parse HTTP response content.

org.xml.sax.SAXParseException: The declaration for the entity "HTML.Version" must end with '>'.
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:257) ~[na:1.8.0_73]
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339) ~[na:1.8.0_73]
    at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:121) ~[na:1.8.0_73]
    at com.amazonaws.util.XpathUtils.documentFrom(XpathUtils.java:133) ~[aws-java-sdk-core-1.11.28.jar:na]
    at com.amazonaws.util.XpathUtils.documentFrom(XpathUtils.java:140) ~[aws-java-sdk-core-1.11.28.jar:na]
    at com.amazonaws.http.DefaultErrorResponseHandler.parseContentAsXml(DefaultErrorResponseHandler.java:104) [aws-java-sdk-core-1.11.28.jar:na]
    at com.amazonaws.http.DefaultErrorResponseHandler.createAse(DefaultErrorResponseHandler.java:82) [aws-java-sdk-core-1.11.28.jar:na]
    at com.amazonaws.http.DefaultErrorResponseHandler.handle(DefaultErrorResponseHandler.java:69) [aws-java-sdk-core-1.11.28.jar:na]
    at com.amazonaws.http.DefaultErrorResponseHandler.handle(DefaultErrorResponseHandler.java:45) [aws-java-sdk-core-1.11.28.jar:na]
    at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1355) [aws-java-sdk-core-1.11.28.jar:na]
    at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:939) [aws-java-sdk-core-1.11.28.jar:na]
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:714) [aws-java-sdk-core-1.11.28.jar:na]
    at com.amazonaws.http.AmazonHttpClient.doExecute(AmazonHttpClient.java:465) [aws-java-sdk-core-1.11.28.jar:na]
    at com.amazonaws.http.AmazonHttpClient.executeWithTimer(AmazonHttpClient.java:427) [aws-java-sdk-core-1.11.28.jar:na]
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:376) [aws-java-sdk-core-1.11.28.jar:na]
    at com.amazonaws.services.sqs.AmazonSQSClient.doInvoke(AmazonSQSClient.java:1750) [aws-java-sdk-sqs-1.11.28.jar:na]
    at com.amazonaws.services.sqs.AmazonSQSClient.invoke(AmazonSQSClient.java:1720) [aws-java-sdk-sqs-1.11.28.jar:na]
    at com.amazonaws.services.sqs.AmazonSQSClient.receiveMessage(AmazonSQSClient.java:1370) [aws-java-sdk-sqs-1.11.28.jar:na]
    at uk.co.bbc.seg_uploader.messaging.SQSSegNotificationQueue.retrieveSQSMessages(SQSSegNotificationQueue.java:59) [classes/:na]
    at uk.co.bbc.seg_uploader.messaging.SQSSegNotificationQueue.receiveNotificationsFromQueue(SQSSegNotificationQueue.java:48) [classes/:na]
    at uk.co.bbc.seg_uploader.messaging.SQSSegNotificationQueue.pollQueue(SQSSegNotificationQueue.java:35) [classes/:na]
    at uk.co.bbc.seg_uploader.schedule.SegUploaderScheduler.schedule(SegUploaderScheduler.java:50) [classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_73]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_73]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_73]
    at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_73]
    at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:65) [spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) [spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_73]
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [na:1.8.0_73]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_73]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [na:1.8.0_73]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_73]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_73]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_73]

2016-08-23 12:44:10.298 ERROR 14543 --- [pool-1-thread-1] u.c.b.s.m.SQSSegNotificationQueue        : SQS Client failed to receive messages from Seg Uploader Queue

com.amazonaws.services.sqs.model.AmazonSQSException: null (Service: AmazonSQS; Status Code: 504; Error Code: 504 Gateway Time-out; Request ID: null)
    at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1386) ~[aws-java-sdk-core-1.11.28.jar:na]
    at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:939) ~[aws-java-sdk-core-1.11.28.jar:na]
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:714) ~[aws-java-sdk-core-1.11.28.jar:na]
    at com.amazonaws.http.AmazonHttpClient.doExecute(AmazonHttpClient.java:465) ~[aws-java-sdk-core-1.11.28.jar:na]
    at com.amazonaws.http.AmazonHttpClient.executeWithTimer(AmazonHttpClient.java:427) ~[aws-java-sdk-core-1.11.28.jar:na]
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:376) ~[aws-java-sdk-core-1.11.28.jar:na]
    at com.amazonaws.services.sqs.AmazonSQSClient.doInvoke(AmazonSQSClient.java:1750) ~[aws-java-sdk-sqs-1.11.28.jar:na]
    at com.amazonaws.services.sqs.AmazonSQSClient.invoke(AmazonSQSClient.java:1720) ~[aws-java-sdk-sqs-1.11.28.jar:na]
    at com.amazonaws.services.sqs.AmazonSQSClient.receiveMessage(AmazonSQSClient.java:1370) ~[aws-java-sdk-sqs-1.11.28.jar:na]
    at uk.co.bbc.seg_uploader.messaging.SQSSegNotificationQueue.retrieveSQSMessages(SQSSegNotificationQueue.java:59) [classes/:na]
    at uk.co.bbc.seg_uploader.messaging.SQSSegNotificationQueue.receiveNotificationsFromQueue(SQSSegNotificationQueue.java:48) [classes/:na]
    at uk.co.bbc.seg_uploader.messaging.SQSSegNotificationQueue.pollQueue(SQSSegNotificationQueue.java:35) [classes/:na]
    at uk.co.bbc.seg_uploader.schedule.SegUploaderScheduler.schedule(SegUploaderScheduler.java:50) [classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_73]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_73]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_73]
    at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_73]
    at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:65) [spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) [spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_73]
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [na:1.8.0_73]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_73]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [na:1.8.0_73]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_73]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_73]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_73]

Code

AWSCredentialsProviderChain credentialsProvider = new AWSCredentialsProviderChain(new DefaultAWSCredentialsProviderChain());
ClientConfiguration clientConfiguration = new ClientConfiguration();

AmazonSQSClient sqsClient = new AmazonSQSClient(credentialsProvider, clientConfiguration);
sqsClient.setEndpoint("http://localhost:9324/queue");
ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest("queue1").withMaxNumberOfMessages(10);

List<Message> sqsMessages;

ReceiveMessageResult receiveMessageResult = sqsClient.receiveMessage(receiveMessageRequest);
sqsMessages = receiveMessageResult.getMessages();

I had a similar issue with moto in Python and it was suggested to set env no_proxy to 169.254.169.254. https://github.com/spulec/moto/issues/605

os.environ['no_proxy'] = '169.254.169.254'

I tried this here to no avail.
System.setProperty("no_proxy", "169.254.169.254");

Further debugging. Looks likes Apache is trying to route the request to:
http://localhost.bbc.co.uk:9324/queue/queue1

Wondered if you had any ideas. Cheers

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at SQSSegNotificationQueue.retrieveSQSMessages line 59 and the Java AWS client setup shown in the report, especially ClientConfiguration and setEndpoint. Reproduce receiveMessage with the proxy enabled and inspect why the localhost endpoint is being rewritten. Done means the client reaches the local ElasticMQ queue through the proxy environment and receives messages successfully.

Written by the indexing model from the issue text.

Assessment

Tech stack
aws, java
Domain
api, networking
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.