Java Code Examples for org.apache.thrift.TApplicationException#read()
The following examples show how to use
org.apache.thrift.TApplicationException#read() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: ThriftIDLSerializer.java From octo-rpc with Apache License 2.0 | 6 votes |
protected RpcResult doDeserializeResponse(DefaultResponse response, TMessage message, TProtocol protocol) throws Exception { RpcResult rpcResult = new RpcResult(); if (message.type == TMessageType.REPLY) { Object realResult = deserializeResult(protocol, response.getServiceInterface().getName(), message.name); if (realResult instanceof Exception) { // 服务端自定义异常 response.setException((Exception) realResult); } rpcResult.setReturnVal(realResult); } else if (message.type == TMessageType.EXCEPTION) { TApplicationException exception = TApplicationException.read(protocol); MetaUtil.wrapException(exception, response); } if (!response.isOctoProtocol() && hasOldRequestHeader(protocol)) { // 解析老协议的Header RequestHeader requestHeader = new RequestHeader(); protocol.readFieldBegin(); requestHeader.read(protocol); protocol.readFieldEnd(); } return rpcResult; }
Example 2
Source File: TServiceClientNoPrint.java From rpc-benchmark with Apache License 2.0 | 6 votes |
@Override protected void receiveBase(TBase<?, ?> result, String methodName) throws TException { TMessage msg = iprot_.readMessageBegin(); if (msg.type == TMessageType.EXCEPTION) { TApplicationException x = new TApplicationException(); x.read(iprot_); iprot_.readMessageEnd(); throw x; } // System.out.format("Received %d%n", msg.seqid); if (msg.seqid != seqid_) { throw new TApplicationException(TApplicationException.BAD_SEQUENCE_ID, String.format( "%s failed: out of sequence response: expected %d but got %d", methodName, seqid_, msg.seqid)); } result.read(iprot_); iprot_.readMessageEnd(); }
Example 3
Source File: ThriftCodecTest.java From dubbo-2.6.5 with Apache License 2.0 | 4 votes |
@Test public void testEncodeExceptionResponse() throws Exception { URL url = URL.valueOf(ThriftProtocol.NAME + "://127.0.0.1:40880/" + Demo.Iface.class.getName()); Channel channel = new MockedChannel(url); Request request = createRequest(); RpcResult rpcResult = new RpcResult(); String exceptionMessage = "failed"; rpcResult.setException(new RuntimeException(exceptionMessage)); Response response = new Response(); response.setResult(rpcResult); response.setId(request.getId()); ChannelBuffer bos = ChannelBuffers.dynamicBuffer(1024); ThriftCodec.RequestData rd = ThriftCodec.RequestData.create( ThriftCodec.getSeqId(), Demo.Iface.class.getName(), "echoString"); ThriftCodec.cachedRequest.put(request.getId(), rd); codec.encode(channel, bos, response); byte[] buf = new byte[bos.writerIndex() - 4]; System.arraycopy(bos.array(), 4, buf, 0, bos.writerIndex() - 4); ByteArrayInputStream bis = new ByteArrayInputStream(buf); if (bis.markSupported()) { bis.mark(0); } TIOStreamTransport transport = new TIOStreamTransport(bis); TBinaryProtocol protocol = new TBinaryProtocol(transport); Assert.assertEquals(ThriftCodec.MAGIC, protocol.readI16()); Assert.assertEquals(protocol.readI32() + 4, bos.writerIndex()); int headerLength = protocol.readI16(); Assert.assertEquals(ThriftCodec.VERSION, protocol.readByte()); Assert.assertEquals(Demo.Iface.class.getName(), protocol.readString()); Assert.assertEquals(request.getId(), protocol.readI64()); if (bis.markSupported()) { bis.reset(); bis.skip(headerLength); } TMessage message = protocol.readMessageBegin(); Assert.assertEquals("echoString", message.name); Assert.assertEquals(TMessageType.EXCEPTION, message.type); Assert.assertEquals(ThriftCodec.getSeqId(), message.seqid); TApplicationException exception = TApplicationException.read(protocol); protocol.readMessageEnd(); Assert.assertEquals(exceptionMessage, exception.getMessage()); }
Example 4
Source File: ThriftCodecTest.java From dubbox with Apache License 2.0 | 4 votes |
@Test public void testEncodeExceptionResponse() throws Exception { URL url = URL.valueOf( ThriftProtocol.NAME + "://127.0.0.1:40880/" + Demo.Iface.class.getName() ); Channel channel = new MockedChannel( url ); Request request = createRequest(); RpcResult rpcResult = new RpcResult(); String exceptionMessage = "failed"; rpcResult.setException( new RuntimeException( exceptionMessage ) ); Response response = new Response(); response.setResult( rpcResult ); response.setId( request.getId() ); ChannelBuffer bos = ChannelBuffers.dynamicBuffer(1024); ThriftCodec.RequestData rd = ThriftCodec.RequestData.create( ThriftCodec.getSeqId(), Demo.Iface.class.getName(), "echoString" ); ThriftCodec.cachedRequest.put( request.getId(), rd ); codec.encode( channel, bos, response ); byte[] buf = new byte[bos.writerIndex() - 4]; System.arraycopy( bos.array(), 4, buf, 0, bos.writerIndex() - 4 ); ByteArrayInputStream bis = new ByteArrayInputStream( buf); if ( bis.markSupported() ) { bis.mark( 0 ); } TIOStreamTransport transport = new TIOStreamTransport( bis ); TBinaryProtocol protocol = new TBinaryProtocol( transport ); Assert.assertEquals( ThriftCodec.MAGIC, protocol.readI16() ); Assert.assertEquals( protocol.readI32() + 4, bos.writerIndex() ); int headerLength = protocol.readI16(); Assert.assertEquals( ThriftCodec.VERSION, protocol.readByte() ); Assert.assertEquals( Demo.Iface.class.getName(), protocol.readString() ); Assert.assertEquals( request.getId(), protocol.readI64() ); if ( bis.markSupported() ) { bis.reset(); bis.skip( headerLength ); } TMessage message = protocol.readMessageBegin(); Assert.assertEquals( "echoString", message.name ); Assert.assertEquals( TMessageType.EXCEPTION, message.type ); Assert.assertEquals( ThriftCodec.getSeqId(), message.seqid ); TApplicationException exception = TApplicationException.read( protocol ); protocol.readMessageEnd(); Assert.assertEquals( exceptionMessage, exception.getMessage() ); }
Example 5
Source File: ThriftCodecTest.java From dubbox-hystrix with Apache License 2.0 | 4 votes |
@Test public void testEncodeExceptionResponse() throws Exception { URL url = URL.valueOf( ThriftProtocol.NAME + "://127.0.0.1:40880/" + Demo.Iface.class.getName() ); Channel channel = new MockedChannel( url ); Request request = createRequest(); RpcResult rpcResult = new RpcResult(); String exceptionMessage = "failed"; rpcResult.setException( new RuntimeException( exceptionMessage ) ); Response response = new Response(); response.setResult( rpcResult ); response.setId( request.getId() ); ChannelBuffer bos = ChannelBuffers.dynamicBuffer(1024); ThriftCodec.RequestData rd = ThriftCodec.RequestData.create( ThriftCodec.getSeqId(), Demo.Iface.class.getName(), "echoString" ); ThriftCodec.cachedRequest.put( request.getId(), rd ); codec.encode( channel, bos, response ); byte[] buf = new byte[bos.writerIndex() - 4]; System.arraycopy( bos.array(), 4, buf, 0, bos.writerIndex() - 4 ); ByteArrayInputStream bis = new ByteArrayInputStream( buf); if ( bis.markSupported() ) { bis.mark( 0 ); } TIOStreamTransport transport = new TIOStreamTransport( bis ); TBinaryProtocol protocol = new TBinaryProtocol( transport ); Assert.assertEquals( ThriftCodec.MAGIC, protocol.readI16() ); Assert.assertEquals( protocol.readI32() + 4, bos.writerIndex() ); int headerLength = protocol.readI16(); Assert.assertEquals( ThriftCodec.VERSION, protocol.readByte() ); Assert.assertEquals( Demo.Iface.class.getName(), protocol.readString() ); Assert.assertEquals( request.getId(), protocol.readI64() ); if ( bis.markSupported() ) { bis.reset(); bis.skip( headerLength ); } TMessage message = protocol.readMessageBegin(); Assert.assertEquals( "echoString", message.name ); Assert.assertEquals( TMessageType.EXCEPTION, message.type ); Assert.assertEquals( ThriftCodec.getSeqId(), message.seqid ); TApplicationException exception = TApplicationException.read( protocol ); protocol.readMessageEnd(); Assert.assertEquals( exceptionMessage, exception.getMessage() ); }
Example 6
Source File: ThriftCodecTest.java From dubbox with Apache License 2.0 | 4 votes |
@Test public void testEncodeExceptionResponse() throws Exception { URL url = URL.valueOf( ThriftProtocol.NAME + "://127.0.0.1:40880/" + Demo.Iface.class.getName() ); Channel channel = new MockedChannel( url ); Request request = createRequest(); RpcResult rpcResult = new RpcResult(); String exceptionMessage = "failed"; rpcResult.setException( new RuntimeException( exceptionMessage ) ); Response response = new Response(); response.setResult( rpcResult ); response.setId( request.getId() ); ChannelBuffer bos = ChannelBuffers.dynamicBuffer(1024); ThriftCodec.RequestData rd = ThriftCodec.RequestData.create( ThriftCodec.getSeqId(), Demo.Iface.class.getName(), "echoString" ); ThriftCodec.cachedRequest.put( request.getId(), rd ); codec.encode( channel, bos, response ); byte[] buf = new byte[bos.writerIndex() - 4]; System.arraycopy( bos.array(), 4, buf, 0, bos.writerIndex() - 4 ); ByteArrayInputStream bis = new ByteArrayInputStream( buf); if ( bis.markSupported() ) { bis.mark( 0 ); } TIOStreamTransport transport = new TIOStreamTransport( bis ); TBinaryProtocol protocol = new TBinaryProtocol( transport ); Assert.assertEquals( ThriftCodec.MAGIC, protocol.readI16() ); Assert.assertEquals( protocol.readI32() + 4, bos.writerIndex() ); int headerLength = protocol.readI16(); Assert.assertEquals( ThriftCodec.VERSION, protocol.readByte() ); Assert.assertEquals( Demo.Iface.class.getName(), protocol.readString() ); Assert.assertEquals( request.getId(), protocol.readI64() ); if ( bis.markSupported() ) { bis.reset(); bis.skip( headerLength ); } TMessage message = protocol.readMessageBegin(); Assert.assertEquals( "echoString", message.name ); Assert.assertEquals( TMessageType.EXCEPTION, message.type ); Assert.assertEquals( ThriftCodec.getSeqId(), message.seqid ); TApplicationException exception = TApplicationException.read( protocol ); protocol.readMessageEnd(); Assert.assertEquals( exceptionMessage, exception.getMessage() ); }
Example 7
Source File: FunctionCall.java From Firefly with Apache License 2.0 | 4 votes |
Object recv(TProtocol protocol, int seqid) throws Exception { TMessage msg = protocol.readMessageBegin(); if (msg.type == TMessageType.EXCEPTION) { TApplicationException applicationException = TApplicationException.read(protocol); protocol.readMessageEnd(); throw applicationException; } if (msg.seqid != seqid) { throw new TApplicationException(TApplicationException.BAD_SEQUENCE_ID, methodName + " failed: out of sequence response"); } protocol.readStructBegin(); Object success = null; Exception exception = null; while (true) { TField tField = protocol.readFieldBegin(); if (tField.type == TType.STOP) { break; } FieldSpec fieldSpec = null; if (tField.id == 0) { fieldSpec = responseSuccessType; } else { fieldSpec = responseExceptionTypeMap.get(tField.id); } if (fieldSpec == null || fieldSpec.typeAdapter.getTType() != tField.type) { TProtocolUtil.skip(protocol, tField.type); } else { Object value = fieldSpec.typeAdapter.read(protocol); if (tField.id == 0) { success = value; } else { exception = (Exception) value; } } protocol.readFieldEnd(); } protocol.readStructEnd(); protocol.readMessageEnd(); if (exception != null) { throw exception; } if (success != null) { return success; } if (isVoid) { return null; } throw new TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, methodName + " failed: unknown result"); }
Example 8
Source File: ThriftCodecTest.java From dubbox with Apache License 2.0 | 4 votes |
@Test public void testEncodeExceptionResponse() throws Exception { URL url = URL.valueOf( ThriftProtocol.NAME + "://127.0.0.1:40880/" + Demo.Iface.class.getName() ); Channel channel = new MockedChannel( url ); Request request = createRequest(); RpcResult rpcResult = new RpcResult(); String exceptionMessage = "failed"; rpcResult.setException( new RuntimeException( exceptionMessage ) ); Response response = new Response(); response.setResult( rpcResult ); response.setId( request.getId() ); ChannelBuffer bos = ChannelBuffers.dynamicBuffer(1024); ThriftCodec.RequestData rd = ThriftCodec.RequestData.create( ThriftCodec.getSeqId(), Demo.Iface.class.getName(), "echoString" ); ThriftCodec.cachedRequest.put( request.getId(), rd ); codec.encode( channel, bos, response ); byte[] buf = new byte[bos.writerIndex() - 4]; System.arraycopy( bos.array(), 4, buf, 0, bos.writerIndex() - 4 ); ByteArrayInputStream bis = new ByteArrayInputStream( buf); if ( bis.markSupported() ) { bis.mark( 0 ); } TIOStreamTransport transport = new TIOStreamTransport( bis ); TBinaryProtocol protocol = new TBinaryProtocol( transport ); Assert.assertEquals( ThriftCodec.MAGIC, protocol.readI16() ); Assert.assertEquals( protocol.readI32() + 4, bos.writerIndex() ); int headerLength = protocol.readI16(); Assert.assertEquals( ThriftCodec.VERSION, protocol.readByte() ); Assert.assertEquals( Demo.Iface.class.getName(), protocol.readString() ); Assert.assertEquals( request.getId(), protocol.readI64() ); if ( bis.markSupported() ) { bis.reset(); bis.skip( headerLength ); } TMessage message = protocol.readMessageBegin(); Assert.assertEquals( "echoString", message.name ); Assert.assertEquals( TMessageType.EXCEPTION, message.type ); Assert.assertEquals( ThriftCodec.getSeqId(), message.seqid ); TApplicationException exception = TApplicationException.read( protocol ); protocol.readMessageEnd(); Assert.assertEquals( exceptionMessage, exception.getMessage() ); }