封装resteasy client

封装在这里,
需要可以调用 CWFClient的接口
登录时注册 authenticator

用户名和密码从这个登录入口获取

    private void validateLogin(TextField name, PasswordField password) throws IOException, URISyntaxException, InterruptedException {
        uri = address.getText().equals("") ? "http://localhost:8400/" : "http://" + address.getText() + "/";
        userSession.setAuthenticator(new Authenticator(name.getText(), password.getText()));
        ResteasyWebTarget target = client.target(uri + "wms/user/current-user").queryParam("username", name.getText(), "password", password.getText()).register(new Authenticator(name.getText(), password.getText()));
        Response response = target.request().get();
        if (response.getStatus() == HttpStatus.SC_OK) {
            log.info("user {} ", name.getText());
            Stage stage = (Stage) cancel.getScene().getWindow();
            stage.close();
            Parent root = FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/fxml/print.fxml")),
                    null, null, (clazz) -> Main.applicationContext.getBean(clazz));
            Stage printStage = new Stage();
            printStage.setTitle("CWF");
            printStage.initStyle(StageStyle.DECORATED);
            printStage.setScene(new Scene(root, 900, 800));
            printStage.setResizable(false);
            printStage.show();
        } else {
            messageLabel.setText("用户名或密码错误!");
        }
    }
@Data
public class UserSession {

    private String username;
    private String password;
    private Authenticator authenticator;
    private CWFClient cwfClient;

    public void onLogin() {
//        ResteasyClient client = (ResteasyClient) ClientBuilder.newClient().register(authenticator);
//        ResteasyWebTarget target = client.target(LoginController.uri);
//        CWFClient proxy = target.proxy(CWFClient.class);
        PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
        CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(cm).build();
        cm.setMaxTotal(200); // Increase max total connection to 200
        cm.setDefaultMaxPerRoute(20); // Increase default max connection per route to 20

        ApacheHttpClient43Engine engine = new ApacheHttpClient43Engine(httpClient);

        ResteasyClient client = ((ResteasyClientBuilder) ClientBuilder.newBuilder()).httpEngine(engine).build();
//        ResteasyWebTarget target = client.target(FULL_PATH);
//        CWFClient proxy = target.proxy(CWFClient.class);
    }


}

public class Authenticator implements ClientRequestFilter {

    private final String user;
    private final String password;

    public Authenticator(String user, String password) {
        this.user = user;
        this.password = password;
    }


    public void filter(ClientRequestContext requestContext)  {
        MultivaluedMap<String, Object> headers = requestContext.getHeaders();
        final String basicAuthentication = getBasicAuthentication();
        headers.add("Authorization", basicAuthentication);

    }

    private String getBasicAuthentication() {
        String token = this.user + ":" + this.password;
        return "Basic " +
                DatatypeConverter.printBase64Binary(token.getBytes(StandardCharsets.UTF_8));
    }
}
@Path("/wms")
public interface CWFClient {


    @GET
    @Path("virtualBox/{boxNumber}/virtualOrders")
    List<VirtualOrderPrintVO> getVirtualOrdersByBoxNumber(@PathParam("boxNumber") String boxNumber);


    @POST
    @Path("virtualBox/virtualOrder/{orderNumber}/confirmPrint")
    void confirmPrint(@PathParam("orderNumber") String orderNumber);


    @GET
    @Path("virtualBox/{virtualBoxCode}/summary")
    VirtualBoxSummary getSummaryBoxRecord(@PathParam("virtualBoxCode") String virtualBoxCode);
}

在service里进行调用

@Log4j2
@Service
public class CWFService {
 
    @Autowired
    private UserSession userSession;

    public VirtualOrder findByOrderNumber( String scan) {
// 这里进行调用
        List<VirtualOrderPrintVO> vo = userSession.getCwfClient().getVirtualOrdersByBoxNumber(scan);
        VirtualOrder label = new VirtualOrder();
        for (VirtualOrderPrintVO printVO : vo) {
            label.setBoxCode(printVO.getBoxCode());
            label.setOrderNumber(printVO.getOrderNumber());
            label.setPrintTime(printVO.getPrintTime());
            label.setTracking(printVO.getTracking());
            label.setWeight(printVO.getWeight());
            label.setShippingLabelFile(printVO.getShippingLabelFile());
        }
        return label;
    }