[jboss-user] [JBossWS] - streaming with jbossws with small packets, or getting HttpUr

suvigy do-not-reply at jboss.com
Tue Jan 29 16:27:22 EST 2008


hi!

 I'm developing a hyperterminal applet, where I'd like that the user can send data to COM ports via applet, and the COM port sends data back via web-service (streaming). Is it possible to do it with JBOSSWS? I need streaming for that. But often only few bytes (even 1 byte) comes from the COM port, I would like this even 1 byte to be flushed. I don't want any buffering.
I created a test service in that I enabled MTOM, but it's buffering, because I have to wait 10 seconds on the client side till the data arrives:

Server side, in that I simulate the hyperterminal, after each byte I wait 1 second. It should be flushed each time :
 
  | @MTOM
  | @BindingType(value=javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_MTOM_BINDING)
  | @WebService
  | public class TestService {
  | 		@WebMethod
  | 		public @XmlMimeType("application/octet-stream") DataHandler getStream() {
  | 			return new DataHandler(new DataSource() {
  | 
  | 				public String getContentType() {
  | 					
  | 					return "application/octet-stream";
  | 				}
  | 
  | 				public InputStream getInputStream() throws IOException {
  | 					
  | 					return new InputStream() {
  | 						private int count = 0;
  | 						@Override
  | 						public int read() throws IOException {
  | 							if (count!=0)
  | 								try {
  | 									Thread.sleep(1000);
  | 								} catch (InterruptedException e) {
  | 									
  | 								}
  | 							count++;
  | 							if (count>10)
  | 								return -1;
  | 						    return 'a';
  | 							
  | 						}
  | 					
  | 					};
  | 					
  | 				}
  | 
  | 				public String getName() {
  | 					
  | 					return "test";
  | 				}
  | 
  | 				public OutputStream getOutputStream() throws IOException {
  | 					
  | 					return null;
  | 				}
  | 			
  | 			});
  | 		
  | 			}
  | 		}
  | 		
  | 
  | 

If there is no Binding annotation at the beginning, then the behaviour is the same 

Client Side:

  | public class ConsoleTest {
  | 
  | 	/**
  | 	 * @param args
  | 	 */
  | 	public static void main(String[] args) throws Exception {
  | 		MTOMFeature feature = new MTOMFeature();
  | 		
  | 		TestServiceService service = new TestServiceService();
  | 		
  | 		TestService port = service.getTestServicePort(feature);
  | 		Map<String, Object> ctxt = ((BindingProvider)port).getRequestContext();
  | 		
  | 		
  | 		// Enable HTTP chunking mode, otherwise HttpURLConnection buffers
  | 		ctxt.put(JAXWSProperties.HTTP_CLIENT_STREAMING_CHUNK_SIZE, 1);
  | 		
  | 		DataHandler dh = port.getStream();
  | 		
  | 		InputStream is = dh.getInputStream();
  | 		int data;
  | 		while ((data = is.read())>-1) {
  | 			System.out.print((char)data);
  | 		}
  | 		is.close();
  | 		
  | 	}
  | 
  | }

And I have to wait 10 seconds, till the result comes. I would except the data to come continuously.
I don't know if it is possible.
If not, then I would write an own servlet for that. In the real application I maintain session, so the client uses cookie, but then I would need the http client of jbossws on the client side. Can I get it somehow (What type does it have? HttpUrlConnection?)? 

Thnx 
 George




View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4124581#4124581

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4124581



More information about the jboss-user mailing list