pattern i application yml

0

Gdzie popełniam błąd, chciałbym regex użyć w swoim servisie. Jednak mam błąd nullpointerexception.
mam application yml:

pattern:
  regex: "(\\d{2}):(\\d{2})(?m)"
  multiline: true

mam klase PatternBuilder:

public class PatternBuilder {
    private String regex;
    private boolean multiline;

    public Pattern pattern() {
        int flags = 0;
        if (multiline) flags |= Pattern.MULTILINE;
        return Pattern.compile(regex, flags);
    }
}

oraz użycie w servisie:

private String numbersValidatorPL(String content) {
        Pattern regex= patternBuilder.pattern(); //nullpointer
        String regex2 = regex.toString(); 
        String number = String.valueOf(content).replaceFirst(regex2, "+44" + "($1)-$2-$3");
        return number;

    }

0

Nie inicjalizujesz tego pola: patternBuilder

0

@jarekczek: rzeczywiście tego nie dokleiłem do przykładu, ale mam go zainicjowanego w projekcie:

@Service
public class MessageService {
    private PatternBuilder patternBuilder;
0

Jeśli masz NullPointera w linii:

Pattern regex= patternBuilder.pattern();

To znaczy to tylko tyle, że patternBuilder jest nullem. Jeśli używasz springa, to dodaj tej klasie adnotację @Component, a jeśli nie, to zainicjalizuj (czyli w momencie przypisania utwórz nowy obiekt tego typu).

0

dodałem @Component w mojej klasie:

@Service
@Component
public class MessageService {
}

i mam swoją metodę zrobioną bardzo łopatologcznie:

 private String numbersValidatorPL(String content) {
        PatternBuilder patternBuilder = new PatternBuilder();
        Pattern regex= patternBuilder.pattern();
        String regex2 = regex.toString();
        String number = String.valueOf(content).replaceFirst(regex2, "+44" + "($1)-$2-$3");
        return number;

    }

i dalej mam ten sam błąd.

0

Screenshot from 2018-03-11 12-09-54.png

tak to wyglada w debagu. NIe rozumiem tego, bo patternbuilder nie jest nullem

0

@podroznik: masz racje regex jest nullem.
tzn, że nie pobiera informacji z yml? Jesli tak to jak to sobie powiązać?

0

Musisz użyć czegoś takiego nad polem regex.

@Value("${pattern.regex}")

Musisz jednak pamiętać, że to zadziała tylko na springowych benach a z tego co widzę Twój builder nie jest beanem.

0

@podroznik: trzeba użyć jakieś adnotacji, czy w innym miejscu coś trzeba przebudować?

0

Nie obraź się, ale jak nie ogarniasz takich podstaw to zacznij się uczyć springa od początku. W każdym razie możesz dodać @Service w Twojej klasie PatternBuilder później nad polem private String regex; wkleić to co napisałem wyżej. Następnie ten serwis wstrzyknąć tam gdzie go chcesz uzyć np. w MessageService.

1 użytkowników online, w tym zalogowanych: 0, gości: 1