@Override
    public boolean processArgument(final ShenyuRequest shenyuRequest, final Annotation annotation, final Object arg) {
        String name = ANNOTATION.cast(annotation).value();
        RequestTemplate requestTemplate = shenyuRequest.getRequestTemplate();
        checkState(emptyToNull(name) != null, "RequestHeader.value() was empty on parameter %s", requestTemplate.getMethod().getName());
        Map<String, Collection<String>> headers = shenyuRequest.getHeaders();
        if (arg instanceof Map) {
            ((Map<?, ?>) arg).forEach((key, value) -> {
                if (key instanceof String && value instanceof Collection) {
                    headers.put((String) key, (Collection) value);
                    shenyuRequest.setHeaders(headers);
                } else if (key instanceof String && value instanceof String) {
                    headers.compute((String) key, (header, old) -> {
                        if (CollectionUtils.isEmpty(old)) {
                            return Lists.newArrayList((String) value);
                        }
                        old.add((String) value);
                        return old;
                    });
                    shenyuRequest.setHeaders(headers);
                }
            });
        } else if (arg instanceof String) {
            Collection<String> headerColl = Optional.ofNullable(headers.get(name)).orElseGet(ArrayList::new);
            headerColl.add((String) arg);
            headers.put(name, headerColl);
            shenyuRequest.setHeaders(headers);
        }
        return true;
    }
@Test
    public void processArgumentStringTest() {
        final String headerName = "header1";
        final String headerValue = "value1";

        final RequestHeader header = spy(RequestHeader.class);
        when(header.value()).thenReturn(headerName);

        processor.processArgument(request, header, "value1");

        assertTrue(headers.get(headerName).contains(headerValue));

    }