- Preconditions.checkArgument(rpcService != null, "Rpc Service needs to be specied.");
- @SuppressWarnings("unchecked")
- final
- T proxy = (T) proxies.getUnchecked(rpcService).getProxy();
- return proxy;
- }
-
- @Override
- public ListenableFuture<RpcResult<?>> invoke(final SchemaPath rpc, final DataObject input) {
- final CheckedFuture<DOMRpcResult, DOMRpcException> domFuture = domService.invokeRpc(rpc, serialize(rpc,input));
- return transformFuture(rpc,domFuture,codec.getCodecRegistry());
- }
-
- private RpcServiceAdapter createProxy(final Class<? extends RpcService> key) {
- Preconditions.checkArgument(BindingReflections.isBindingClass(key));
- Preconditions.checkArgument(key.isInterface(), "Supplied RPC service type must be interface.");
- final ImmutableMap<Method, SchemaPath> rpcNames = codec.getRpcMethodToSchemaPath(key);
- return new RpcServiceAdapter(key, rpcNames, this);
- }
-
- private NormalizedNode<?, ?> serialize(final SchemaPath rpc,final DataObject input) {
- if(input == null) {
- return null;
- }
- final QName rpcInputIdentifier = QName.create(rpc.getLastComponent(),"input");
- return new LazySerializedContainerNode(rpcInputIdentifier, input, codec.getCodecRegistry());
- }
-
- private static ListenableFuture<RpcResult<?>> transformFuture(final SchemaPath rpc,final ListenableFuture<DOMRpcResult> domFuture, final BindingNormalizedNodeCodecRegistry codec) {
- return Futures.transform(domFuture, new Function<DOMRpcResult, RpcResult<?>>() {
- @Override
- public RpcResult<?> apply(final DOMRpcResult input) {
- if(input instanceof LazySerializedDOMRpcResult) {
- return ((LazySerializedDOMRpcResult) input).bidningRpcResult();
- }
- final NormalizedNode<?, ?> domData = input.getResult();
- final DataObject bindingResult;
- if(domData != null) {
- final SchemaPath rpcOutput = rpc.createChild(QName.create(rpc.getLastComponent(),"output"));
- bindingResult = codec.fromNormalizedNodeRpcData(rpcOutput, (ContainerNode) domData);
- } else {
- bindingResult = null;
- }
- return RpcResult.class.cast(RpcResultBuilder.success(bindingResult).build());
- }
- });