Как настроить распознаватель точки входа метода для метода с аннотациями InboundHeader в компоненте Java?

#mule #mule-component

#mule #мул-компонент

Вопрос:

В моем потоке определен следующий компонент:

   <component doc:name="GraduationService">
      <method-entry-point-resolver>
          <include-entry-point method="getGraduationDatesWithPidmOrStudentId"/>
      </method-entry-point-resolver>
      <spring-object bean="graduationService" />
  </component>
  

Я пытаюсь вызвать метод ‘getGraduationDatesWithPidmOrStudentId’, определенный в компоненте ‘graduationService’. Вот как выглядит сигнатура метода:

 public Object getGraduationDatesWithPidmOrStudentId(@Payload Payload payload,
    @InboundHeaders("studentId") String studentId, 
    @InboundHeaders("pidm") String pidm ) {  ....... }
  

Я получаю следующую ошибку:

 Message               : Failed to find entry point for component, the following resolvers tried but failed: [
ExplicitMethodEntryPointResolver: Could not find entry point on: "edu.ucdavis.iet.apis.students.graduation.service.GraduationService" with arguments: "{class java.lang.String}"
]
Code                  : MULE_ERROR-321
--------------------------------------------------------------------------------
Exception stack is:
1. Failed to find entry point for component, the following resolvers tried but failed: [
ExplicitMethodEntryPointResolver: Could not find entry point on: "edu.ucdavis.iet.apis.students.graduation.service.GraduationService" with arguments: "{class java.lang.String}"
] (org.mule.model.resolvers.EntryPointNotFoundException)
  org.mule.model.resolvers.DefaultEntryPointResolverSet:49 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/model/resolvers/EntryPointNotFoundException.html)
--------------------------------------------------------------------------------
Root Exception stack trace:
org.mule.model.resolvers.EntryPointNotFoundException: Failed to find entry point for component, the following resolvers tried but failed: [
ExplicitMethodEntryPointResolver: Could not find entry point on: "edu.ucdavis.iet.apis.students.graduation.service.GraduationService" with arguments: "{class java.lang.String}"
]
    at org.mule.model.resolvers.DefaultEntryPointResolverSet.invoke(DefaultEntryPointResolverSet.java:49)
    at org.mule.component.DefaultComponentLifecycleAdapter.invoke(DefaultComponentLifecycleAdapter.java:339)
    at org.mule.component.AbstractJavaComponent.invokeComponentInstance(AbstractJavaComponent.java:82)
      3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
********************************************************************************
  

Если я удалю аннотации для InboundHeaders и изменю «@Payload Полезная нагрузка» на «@Payload Строковая полезная нагрузка», я не смогу, по крайней мере, получить это для разрешения метода. Тогда, похоже, я не понимаю, как должны работать аннотации @InboundHeader.

Ответ №1:

При работе с аннотациями вам не нужно специально устанавливать распознаватель точки входа, поскольку он будет использовать AnnotatedEntryPointResolver под капотом.

Итак, будет работать следующее:

 public Object getGraduationDatesWithPidmOrStudentId(@Payload String payload,
    @InboundHeaders("studentId") String studentId, 
    @InboundHeaders("pidm") String pidm ) {  ....... }
  

И:

 <component doc:name="GraduationService">
     <spring-object bean="graduationService" />
</component>
  

Также вы можете специально настроить его с помощью:

 <component>
   <custom-entry-point-resolver class="org.mule.impl.model.resolvers.AnnotatedEntryPointResolver" />
   <spring-object bean="graduationService" />
</component>
  

Также обратите внимание, что вам не нужно устанавливать полезную нагрузку на экземпляр полезной нагрузки. Mule попытается преобразовать полезную нагрузку в соответствии с типом параметра.