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#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...