11package io .a2a .examples .helloworld ;
22
3+ import java .util .ArrayList ;
34import java .util .HashMap ;
5+ import java .util .List ;
46import java .util .Map ;
7+ import java .util .concurrent .CompletableFuture ;
8+ import java .util .function .BiConsumer ;
9+ import java .util .function .Consumer ;
510
611import com .fasterxml .jackson .databind .ObjectMapper ;
712import io .a2a .A2A ;
13+ import io .a2a .client .A2ACardResolver ;
14+ import io .a2a .client .Client ;
15+ import io .a2a .client .ClientEvent ;
816import io .a2a .client .ClientFactory ;
9- import io .a2a .client .transport .jsonrpc .JSONRPCTransport ;
17+ import io .a2a .client .MessageEvent ;
18+ import io .a2a .client .config .ClientConfig ;
1019import io .a2a .spec .AgentCard ;
11- import io .a2a .spec .EventKind ;
1220import io .a2a .spec .Message ;
13- import io .a2a .spec .MessageSendParams ;
14- import io .a2a .spec .SendMessageResponse ;
1521import io .a2a .spec .Part ;
1622import io .a2a .spec .TextPart ;
1723
@@ -28,7 +34,7 @@ public class HelloWorldClient {
2834 public static void main (String [] args ) {
2935 try {
3036 AgentCard finalAgentCard = null ;
31- AgentCard publicAgentCard = A2A . getAgentCard ("http://localhost:9999" );
37+ AgentCard publicAgentCard = new A2ACardResolver ("http://localhost:9999" ). getAgentCard ( );
3238 System .out .println ("Successfully fetched public agent card:" );
3339 System .out .println (OBJECT_MAPPER .writeValueAsString (publicAgentCard ));
3440 System .out .println ("Using public agent card for client initialization (default)." );
@@ -47,23 +53,47 @@ public static void main(String[] args) {
4753 System .out .println ("Public card does not indicate support for an extended card. Using public card." );
4854 }
4955
50- ClientFactory clientFactory = new ClientFactory ();
51- JSONRPCTransport client = new JSONRPCTransport ( finalAgentCard );
52- Message message = A2A . toUserMessage ( MESSAGE_TEXT ); // the message ID will be automatically generated for you
53- MessageSendParams params = new MessageSendParams . Builder ()
54- . message ( message )
55- . build ();
56- EventKind result = client . sendMessage ( params , null );
57- if ( result instanceof Message responseMessage ) {
58- StringBuilder textBuilder = new StringBuilder ();
59- if ( responseMessage .getParts () != null ) {
60- for ( Part <?> part : responseMessage . getParts () ) {
61- if ( part instanceof TextPart textPart ) {
62- textBuilder . append ( textPart . getText ());
56+ final CompletableFuture < String > messageResponse = new CompletableFuture <> ();
57+
58+ // Create consumers list for handling client events
59+ List < BiConsumer < ClientEvent , AgentCard >> consumers = new ArrayList <>();
60+ consumers . add (( event , agentCard ) -> {
61+ if ( event instanceof MessageEvent messageEvent ) {
62+ Message responseMessage = messageEvent . getMessage ( );
63+ StringBuilder textBuilder = new StringBuilder ();
64+ if ( responseMessage . getParts () != null ) {
65+ for ( Part <?> part : responseMessage .getParts ()) {
66+ if ( part instanceof TextPart textPart ) {
67+ textBuilder . append ( textPart . getText ());
68+ }
6369 }
6470 }
71+ messageResponse .complete (textBuilder .toString ());
72+ } else {
73+ System .out .println ("Received client event: " + event .getClass ().getSimpleName ());
6574 }
66- System .out .println ("Response: " + textBuilder .toString ());
75+ });
76+
77+ // Create error handler for streaming errors
78+ Consumer <Throwable > streamingErrorHandler = (error ) -> {
79+ System .err .println ("Streaming error occurred: " + error .getMessage ());
80+ error .printStackTrace ();
81+ messageResponse .completeExceptionally (error );
82+ };
83+
84+ ClientFactory clientFactory = new ClientFactory (new ClientConfig .Builder ().build ());
85+ Client client = clientFactory .create (finalAgentCard , consumers , streamingErrorHandler );
86+ Message message = A2A .toUserMessage (MESSAGE_TEXT ); // the message ID will be automatically generated for you
87+
88+ System .out .println ("Sending message: " + MESSAGE_TEXT );
89+ client .sendMessage (message );
90+ System .out .println ("Message sent successfully. Responses will be handled by the configured consumers." );
91+
92+ try {
93+ String responseText = messageResponse .get ();
94+ System .out .println ("Response: " + responseText );
95+ } catch (Exception e ) {
96+ System .err .println ("Failed to get response: " + e .getMessage ());
6797 }
6898 } catch (Exception e ) {
6999 System .err .println ("An error occurred: " + e .getMessage ());
0 commit comments