Is there a Java NETCONF client that I can use with the ConfD NETCONF server?

Yes, JNC (Java NETCONF Client) is an open source Tail-f initiative that implements a widely used and very stable Java library for use in a NETCONF client together with a, still considered experimental, YANG --> Java output format plugin for pyang. See https://github.com/tail-f-systems/JNC/

JNC can be used to manage any NETCONF device and is typically a core component in an EMS/NMS solution. It is used to manipulate pieces of configuration data through its generated Java classes. The NETCONF parts of the library are used to communicate with the managed devices, such as ConfD enabled devices / virtual instances.
JNC is used in a NETCONF client implementation, ConfD implements a NETCONF server.

To run the main JNC example, Download JNC, copy the jnc.py script to your ConfD pyang plugin dir (e.g $(CONFD_DIR)/lib/pyang/pyang/plugins/), go to the JNC/jnc folder,

$ ant jar

Now go to the JNC/examples/0-intro/confd folder,

$ make clean all start

Next go to the JNC/examples/0-intro/
folder,

$ ant compile run

Blockquote
JNC can be used to manage any NETCONF device and is typically a core component in an EMS/NMS solution. It is used to manipulate pieces of configuration data through its generated Java classes.

Can JNC be used to manipulate operation data ?
Thanks.

You can only manipulate operational data stored in the ConfD operational data store over the CDB API or MAAPI.
Northbound interfaces, i…e NETCONF, RESTCONF, CLI, SNMP etc., have only read access to operational data.

Thank you for reply.

Sorry I actually mean read access instead of RW. So generally speaking, I can use JNC to read data from Confd operational data store ?

Thanks

If a NETCONF client does not support the NETCONF <get> operation to read operational state information data from a NETCONF server it does not support NETCONF, so yes, JNC support the NETCONF <get> operation.

See https://tools.ietf.org/html/rfc6241#section-7.7

Another NETCONF client option if you enjoy Python but want something more than the netconf-console tool that comes with ConfD: https://github.com/ncclient/ncclient

In the rfc 6241 you posted , in the below example,

 <rpc message-id="101"
      xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
   <get>
     <filter type="subtree">
       <top xmlns="http://example.com/schema/1.2/stats">
         <interfaces>
           <interface>
             <ifName>eth0</ifName>
           </interface>
         </interfaces>
       </top>
     </filter>
   </get>
 </rpc>

I am curious how does the server determine whether this RPC want to access configuration or operation ?

With the NETCONF <get> RPC request, both configuration and operational data that meet the filter criteria will be returned by the NETCONF server.

That makes sense. Thank you.