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.

Reply via email to