# Java Bindings do not have all Ledger API services

**URL:** <https://forum.canton.network/t/java-bindings-do-not-have-all-ledger-api-services/129>\
**Category:** App Development\
**Tags:** daml-sdk\
**Created:** [April 15, 2020, 6:49am UTC](https://forum.canton.network/t/java-bindings-do-not-have-all-ledger-api-services/129 "2020-04-15T06:49:34Z")\
**Posts on this page:** 1\
**Showing post:** 4

<div class="post-metadata">

**Author:** ![bernhard](https://yyz2.discourse-cdn.com/flex034/user_avatar/forum.canton.network/bernhard/32/356_2.png) [@bernhard](https://forum.canton.network/u/bernhard)\
**Post date:** [April 17, 2020, 9:54am UTC](https://forum.canton.network/t/java-bindings-do-not-have-all-ledger-api-services/129/4 "2020-04-17T09:54:52Z")

</div>

> [@Darko](#):
>
> @bernhard has created an example showing what needs to be done.

Here it is. The only important parts here are

- 41-42 to get the service
- 45 to query parties
- 57-61 to allocate a party

```java
import com.daml.ledger.api.v1.admin.PartyManagementServiceGrpc;
import com.daml.ledger.api.v1.admin.PartyManagementServiceGrpc.PartyManagementServiceBlockingStub;
import com.daml.ledger.api.v1.admin.PartyManagementServiceOuterClass.AllocatePartyRequest;
import com.daml.ledger.api.v1.admin.PartyManagementServiceOuterClass.AllocatePartyResponse;
import com.daml.ledger.api.v1.admin.PartyManagementServiceOuterClass.ListKnownPartiesRequest;
import com.daml.ledger.api.v1.admin.PartyManagementServiceOuterClass.ListKnownPartiesResponse;
import com.daml.ledger.api.v1.admin.PartyManagementServiceOuterClass.PartyDetails;
import com.google.gson.Gson;

import io.grpc.Channel;
import io.grpc.ManagedChannelBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Optional;

public class PartyManagementMain {

    private final static Logger logger = LoggerFactory.getLogger(PartyManagementMain.class);

    // application id used for sending commands
    public static final String APP_ID = "PartyManagementApp";

    public static void main(String[] args) {
        // Extract host and port from arguments
        if (args.length < 3) {
            System.err.println("Usage: HOST PORT PARTY");
            System.exit(-1);
        }
        String host = args[0];
        int port = Integer.parseInt(args[1]);
        String party = args[2];

        // create a stub for the PackageManagementService
        Channel channel = ManagedChannelBuilder.forAddress(host, port).usePlaintext().build();
        PartyManagementServiceBlockingStub pms = PartyManagementServiceGrpc.newBlockingStub(channel);

        // query the ledger for parties
        ListKnownPartiesResponse parties = pms.listKnownParties(ListKnownPartiesRequest.newBuilder().build());

        // check whether party exists
        Optional<PartyDetails> partyDetails = parties.getPartyDetailsList().stream()
            .filter(p -> p.getParty().equals(party))
            .findAny();

        // create party if needed and log the result
        Gson gson = new Gson();
        if(partyDetails.isPresent()) {
            logger.info("Party found: " + gson.toJson(partyDetails.get()));
        } else {
            AllocatePartyResponse allocateResponse = pms.allocateParty(
                AllocatePartyRequest.newBuilder()
                    .setDisplayName(party)
                    .setPartyIdHint(party)
                    .build());
            logger.info("New party allocated: " + gson.toJson(allocateResponse.getPartyDetails()));

        }
    }
}

```

---

_[View the full topic](https://forum.canton.network/t/java-bindings-do-not-have-all-ledger-api-services/129)._
