Here is my "Sender" unit test:
import java.io.File;
import javax.jms.Connection;
import javax.jms.Queue;
import javax.jms.QueueSender;
import javax.jms.Session;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.ActiveMQSession;
import org.apache.activemq.BlobMessage;
import org.apache.activemq.command.ActiveMQQueue;
public class BlobSender {
private static final String URI =
"http://zyz.16.233.50:61618?jms.blobTransferPolicy.defaultUploadUrl=http://zyz.16.233.50:61618/fileserver/";
/**
* @param args
*/
public static void main(String[] args) throws Exception {
ActiveMQConnectionFactory factory = new
ActiveMQConnectionFactory(URI);
factory.setCopyMessageOnSend(false);
Connection connection = factory.createQueueConnection();
ActiveMQSession session =
(ActiveMQSession)connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = new ActiveMQQueue("MyQ");
QueueSender queueSender = session.createSender(queue);
BlobMessage msg = session.createBlobMessage(new File("c:\\zz.txt"));
queueSender.send(msg);
System.out.println("msg was sent.");
}
}
Exception is thrown:
Exception in thread "main" javax.jms.JMSException: PUT was not successful:
405 HTTP method PUT is not supported by this URL
at
org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:62)
at
org.apache.activemq.command.ActiveMQBlobMessage.onSend(ActiveMQBlobMessage.java:166)
at
org.apache.activemq.ActiveMQSession.send(ActiveMQSession.java:1622)
at
org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:227)
at
org.apache.activemq.ActiveMQMessageProducerSupport.send(ActiveMQMessageProducerSupport.java:241)
at com.bmc.disco.jms.poc.BlobSender.main(BlobSender.java:30)
Caused by: java.io.IOException: PUT was not successful: 405 HTTP method PUT
is not supported by this URL
at
org.apache.activemq.blob.DefaultBlobUploadStrategy.uploadStream(DefaultBlobUploadStrategy.java:70)
at
org.apache.activemq.blob.DefaultBlobUploadStrategy.uploadFile(DefaultBlobUploadStrategy.java:44)
at
org.apache.activemq.blob.BlobUploader.upload(BlobUploader.java:51)
at
org.apache.activemq.command.ActiveMQBlobMessage.onSend(ActiveMQBlobMessage.java:163)
balderman wrote:
>
> Hi
> I do not think the file is uploaded.:-(
> Where should I look for it?
> Here: <ActiveMQ>\webapps\fileserver ?
> Is the original file name is kept?
>
> Thanks
>
> Avishay
>
>
> Marco Buss wrote:
>>
>> Hello,
>>
>> check if the blob is uploaded to the fileserver webapp. If the blob is
>> uploaded try this:
>>
>> <bean id="jmsFactory"
>> class="org.apache.activemq.pool.PooledConnectionFactory"
>> destroy-method="stop">
>> <property name="connectionFactory">
>> <bean class="org.apache.activemq.ActiveMQConnectionFactory">
>> <property name="brokerURL">
>>
>> <value>http://xyz.16.233.50:61618?jms.blobTransferPolicy.uploadUrl=http://xyz.16.233.50:8161/fileserver/</value>
>> </property>
>> <!-- default is true -->
>> <property name="copyMessagesOnSend">
>> <!-- I am not sure if this works for boolean properties. If not search
>> the spring documentation how to inject booleans -->
>> <value>false</value>
>> </property>
>> </bean>
>> </property>
>> </bean>
>>
>> If this not work. Please provide a unit test for the problem.
>>
>> regards
>> Marco Buss
>>
>>
>> balderman wrote:
>>>
>>> Hi
>>> I am using ActiveMQ 5.1.
>>> I want to to use BlobMessage in order to send large amounts of data.
>>> When the consumer get the message and the below code is executed:
>>> inputStream = blobMessage.getInputStream();
>>> the inputStream is null.
>>> I have seen few posts regarding this issue but I could not understand
>>> what is the right way to do it.
>>> More info:
>>> 1) The message sender and the message consumer run on my PC.
>>> 2) The message broker run on a different machine.
>>> 3) I am using Spring JMS template. Here is a config snippet of the
>>> Sender:
>>> (I replaced some part of the IP with xyz - but this is the IP of the
>>> message broker)
>>> ...
>>> <bean id="jmsFactory"
>>> class="org.apache.activemq.pool.PooledConnectionFactory"
>>> destroy-method="stop">
>>> <property name="connectionFactory">
>>> <bean class="org.apache.activemq.ActiveMQConnectionFactory">
>>> <property name="brokerURL">
>>>
>>> <value>http://xyz.16.233.50:61618?jms.blobTransferPolicy.uploadUrl=http://xyz.16.233.50:8161/fileserver/</value>
>>> </property>
>>> </bean>
>>> </property>
>>> </bean>
>>> ...
>>> 4) Here is how I create the BlobMessage:
>>> blobMessage = activeMQSession.createBlobMessage(new File("path to the
>>> local file system here"));
>>> When I call blobMessage.getURL() I get null.
>>> If I create the message with a URL as argument:
>>> blobMessage = activeMQSession.createBlobMessage(new URL("url here"));
>>> the call to getURL() return a valid value.
>>> 5) I know there is an option to use BlobTransferPolicy. Do I have to use
>>> it or the default is good enough?
>>> Please advice.
>>>
>>> Thanks
>>>
>>> Avishay
>>>
>>
>>
>
>
--
View this message in context:
http://www.nabble.com/BlobMessage---How-to-make-it-work--tp17644495s2354p17646660.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.