Для одного из вариантов использования API SOAP возвращает очень простой ответ, который представляет собой ' SessionException' с тремя параметрами, то есть кодом (длинным), сообщением (строкой), причиной (строкой).
Ниже приведен ответ перед его маршалингом в формат xml и возвратом из API.
code=1,message=Unexpected Exception,reason=В хранилище сеансов для входного msisdn не найден сеанс
Ниже приведен файл схемы (xsd) для использования в моем примере. проект:
Код: Выделить всё
р>
Код: Выделить всё
package com.openet.orchestration.provisioning.route.soap;
import com.openet.modules.udsf.api.model.RecordMeta;
import com.openet.orchestration.customorchestrationgateway.router.processor.SBARouterContextInitProcessor;
import com.openet.orchestration.provisioning.common.JacksonConfig;
import com.openet.orchestration.provisioning.pojo.RecordSearchResult;
import com.openet.orchestration.provisioning.processor.NudsfDataRepositorySearchRecordEgressProcessor;
import com.openet.orchestration.provisioning.processor.NudsfDataRepositorySearchRecordIngressProcessor;
import com.openet.orchestration.provisioning.processor.NudsfResponseProcessor;
import com.openet.orchestration.provisioning.sba.router.AddSbaRouterData;
import com.tibco.crmwschannel.GetActiveSessions;
import com.tibco.crmwschannel.GetActiveSessionsResponse;
import com.tibco.crmwschannel.SessionException;
import lombok.extern.slf4j.Slf4j;
import org.apache.camel.Exchange;
import org.apache.camel.LoggingLevel;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.jackson.JacksonDataFormat;
import org.apache.camel.converter.jaxb.JaxbDataFormat;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import static com.openet.orchestration.provisioning.util.RouterConstants.DIRECT_SBA_ROUTER;
import static org.apache.camel.LoggingLevel.DEBUG;
@Component
@Slf4j
public class GetActiveSessionsRoute extends RouteBuilder {
@Autowired
private AddSbaRouterData addSbaRouterDataNudsfDataRepository;
@Autowired
private NudsfDataRepositorySearchRecordIngressProcessor nudsfDataRepositorySearchRecordIngressProcessor;
@Autowired
private NudsfDataRepositorySearchRecordEgressProcessor nudsfDataRepositorySearchRecordEgressProcessor;
@Autowired
private NudsfResponseProcessor nudsfResponseProcessor;
@Autowired
private JacksonConfig jacksonConfig;
@Override
public void configure() throws Exception {
JacksonDataFormat jackSubsResponse = new JacksonDataFormat(jacksonConfig.jsonObjectMapper(), RecordSearchResult.class);
JacksonDataFormat getSessionsResponse=new JacksonDataFormat(jacksonConfig.jsonObjectMapper(),RecordMeta.class);
JaxbDataFormat jaxbReq = new JaxbDataFormat(GetActiveSessions.class.getPackage().getName());
jaxbReq.setSchema("classpath:wsdl/PolicyCRMImplService_schema1.xsd");
JaxbDataFormat jaxbRes = new JaxbDataFormat(GetActiveSessionsResponse.class.getPackage().getName());
jaxbRes.setSchema("classpath:wsdl/PolicyCRMImplService_schema1.xsd");
JaxbDataFormat jaxbExc = new JaxbDataFormat(SessionException.class.getPackage().getName());
jaxbExc.setSchema("classpath:wsdl/PolicyCRMImplService_schema1.xsd");
from("spring-ws:rootqname:{http://crmwschannel.tibco.com/}getActiveSessions?endpointMapping=#bean:endpointMapping")
.log(LoggingLevel.INFO, "STARTING ROUTE {}", GetActiveSessionsRoute.class.getSimpleName())
.unmarshal(jaxbReq)
.doTry()
.process(nudsfDataRepositorySearchRecordIngressProcessor)
.process(new SBARouterContextInitProcessor())
.process(addSbaRouterDataNudsfDataRepository)
.log(DEBUG, "sending to SBA router")
.to(DIRECT_SBA_ROUTER)
.choice()
.when(simple("${header.CamelHttpResponseCode} == 204"))
.log("Error in GetActive sessions route due to no session being present in the udsf")
.bean(NudsfResponseProcessor.class,"handleGetActiveSessionException")
.marshal(jaxbExc)
.stop()
.endChoice()
.when(simple("${header.CamelHttpResponseCode} != 204"))
.log("inside when != 204")
.unmarshal(jackSubsResponse)
.process(x -> jackSubsResponse.close())
.process(nudsfDataRepositorySearchRecordEgressProcessor)
.loop(exchangeProperty(Exchange.LOOP_SIZE))
.process(nudsfResponseProcessor)
.to(DIRECT_SBA_ROUTER)
.unmarshal(getSessionsResponse)
.process(x -> getSessionsResponse.close())
.bean(NudsfResponseProcessor.class,"processGetSessionRecordResponse")
.end()
.bean(NudsfResponseProcessor.class,"constructGetActiveSessionHistoryFinalResponse")
.marshal(jaxbRes)
.endChoice()
.end()
.endDoTry()
.doCatch(Exception.class)
.log("exception in getActiveSessions route")
.marshal(jaxbExc)
.end();
}
}
Код: Выделить всё
public void handleGetActiveSessionException(Exchange exchange){
SessionException sessionException=new SessionException();
sessionException.setCode(1L);
sessionException.setMessage("Unexpected Exception");
sessionException.setReason("No session found in the session store for the input msisdn");
exchange.getIn().setBody(sessionException);
log.debug("session exception response: {}", ReflectionToStringBuilder.toString(sessionException));
exchange.getIn().setHeader(Exchange.HTTP_RESPONSE_CODE,500);
}
Код: Выделить всё
98243311655600
Код: Выделить всё
2024-07-13T07:21:20,356 [http-nio-8080-exec-7] TRACE org.apache.camel.converter.jaxb.FallbackTypeConverter - - - Marshal from value com.tibco.crmwschannel.SessionException@45f92bf1 to type interface javax.xml.transform.Source 2024-07-13T07:21:20,356 [http-nio-8080-exec-7] DEBUG jakarta.xml.bind - - - Checking system property jakarta.xml.bind.JAXBContextFactory 2024-07-13T07:21:20,356 [http-nio-8080-exec-7] DEBUG jakarta.xml.bind - - - not found 2024-07-13T07:21:20,357 [http-nio-8080-exec-7] DEBUG jakarta.xml.bind - - - ServiceProvider loading Facility used; returning object [org.glassfish.jaxb.runtime.v2.JAXBContextFactory] 2024-07-13T07:21:20,357 [http-nio-8080-exec-7] DEBUG jakarta.xml.bind - - - Using jakarta.xml.bind-api on the class path. 2024-07-13T07:21:20,357 [http-nio-8080-exec-7] DEBUG org.glassfish.jaxb.runtime.v2.ContextFactory - - - Property org.glassfish.jaxb.XmlAccessorFactoryis not active. Using JAXB's implementation 2024-07-13T07:21:20,367 [http-nio-8080-exec-7] DEBUG org.springframework.ws.soap.server.endpoint.SoapFaultAnnotationExceptionResolver - - - Resolving exception from endpoint [Consumer[spring-ws://rootqname:%7Bhttp://crmwschannel.tibco.com/%7DgetActiveSessions?endpointMapping=%23bean%3AendpointMapping]]: org.w3c.dom.DOMException: INVALID_CHARACTER_ERR: An invalid or illegal XML character is specified. 2024-07-13T07:21:20,368 [http-nio-8080-exec-7] DEBUG org.springframework.ws.soap.server.endpoint.SimpleSoapExceptionResolver - - - Resolving exception from endpoint [Consumer[spring-ws://rootqname:%7Bhttp://crmwschannel.tibco.com/%7DgetActiveSessions?endpointMapping=%23bean%3AendpointMapping]]: org.w3c.dom.DOMException: INVALID_CHARACTER_ERR: An invalid or illegal XML character is specified. 2024-07-13T07:21:20,378 [http-nio-8080-exec-7] DEBUG org.springframework.ws.soap.server.SoapMessageDispatcher - - - Endpoint invocation resulted in exception - responding with Fault org.w3c.dom.DOMException: INVALID_CHARACTER_ERR: An invalid or illegal XML character is specified. at com.sun.org.apache.xerces.internal.dom.CoreDocumentImpl.createAttribute(CoreDocumentImpl.java:573) ~[?:?] at com.sun.org.apache.xerces.internal.dom.ElementImpl.setAttribute(ElementImpl.java:503) ~[?:?] at com.sun.xml.messaging.saaj.soap.impl.ElementImpl.setAttribute(ElementImpl.java:87) ~[saaj-impl-3.0.2.jar!/:3.0.2] at com.sun.xml.messaging.saaj.soap.impl.ElementImpl.addAttributeBare(ElementImpl.java:749) ~[saaj-impl-3.0.2.jar!/:3.0.2] at com.sun.xml.messaging.saaj.soap.impl.ElementImpl.addAttributeBare(ElementImpl.java:730) ~[saaj-impl-3.0.2.jar!/:3.0.2] at com.sun.xml.messaging.saaj.soap.impl.ElementImpl.addAttribute(ElementImpl.java:715) ~[saaj-impl-3.0.2.jar!/:3.0.2] at org.springframework.ws.soap.saaj.SaajSoapElement.addAttribute(SaajSoapElement.java:59) ~[spring-ws-core-4.0.6.jar!/:?] at org.apache.camel.component.spring.ws.filter.impl.BasicMessageFilter.doProcessSoapHeader(BasicMessageFilter.java:124) ~[camel-spring-ws-4.2.0.jar!/:4.2.0] at org.apache.camel.component.spring.ws.filter.impl.BasicMessageFilter.processSoapHeader(BasicMessageFilter.java:81) ~[camel-spring-ws-4.2.0.jar!/:4.2.0] at org.apache.camel.component.spring.ws.filter.impl.BasicMessageFilter.processHeaderAndAttachments(BasicMessageFilter.java:69) ~[camel-spring-ws-4.2.0.jar!/:4.2.0] at org.apache.camel.component.spring.ws.filter.impl.BasicMessageFilter.filterConsumer(BasicMessageFilter.java:58) ~[camel-spring-ws-4.2.0.jar!/:4.2.0] at org.apache.camel.component.spring.ws.SpringWebserviceConsumer.invoke(SpringWebserviceConsumer.java:82) ~[camel-spring-ws-4.2.0.jar!/:4.2.0] at org.springframework.ws.server.endpoint.adapter.MessageEndpointAdapter.invoke(MessageEndpointAdapter.java:43) ~[spring-ws-core-4.0.6.jar!/:?] at org.springframework.ws.server.MessageDispatcher.dispatch(MessageDispatcher.java:230) [spring-ws-core-4.0.6.jar!/:?] at org.springframework.ws.server.MessageDispatcher.receive(MessageDispatcher.java:174) [spring-ws-core-4.0.6.jar!/:?] at org.springframework.ws.transport.support.WebServiceMessageReceiverObjectSupport.handleConnection(WebServiceMessageReceiverObjectSupport.java:88) [spring-ws-core-4.0.6.jar!/:?] at org.springframework.ws.transport.http.WebServiceMessageReceiverHandlerAdapter.handle(WebServiceMessageReceiverHandlerAdapter.java:60) [spring-ws-core-4.0.6.jar!/:?] at org.springframework.ws.transport.http.MessageDispatcherServlet.doService(MessageDispatcherServlet.java:288) [spring-ws-core-4.0.6.jar!/:?] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1011) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:6.0.13] at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:6.0.13] at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:6.0.0] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:6.0.13] at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:6.0.0] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT] at com.openet.orchestration.provisioning.route.soap.WebServiceConfig$WSDLQuestionMarkReplaceFilter.doFilter(WebServiceConfig.java:118) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:6.0.13] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:6.0.13] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT] at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:6.0.13] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:6.0.13] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT] at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:109) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:6.0.13] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:6.0.13] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:6.0.13] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:6.0.13] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:340) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [inwi-ussd-cog-service-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT] at java.lang.Thread.run(Thread.java:840) [?:?] 2024-07-13T07:21:20,380 [http-nio-8080-exec-7] DEBUG com.openet.orchestration.provisioning.route.soap.SoapEndpointResponseInterceptor - - - In Soap Endpoint Response Interceptor handle fault 2024-07-13T07:21:20,381 [http-nio-8080-exec-7] DEBUG com.openet.orchestration.provisioning.route.soap.SoapEndpointResponseInterceptor - - - In change soap envelope fault:com.sun.xml.messaging.saaj.soap.ver1_1.Fault1_1Impl@336ecc8b 2024-07-13T07:21:20,411 [http-nio-8080-exec-7] DEBUG org.springframework.ws.soap.server.endpoint.interceptor.SoapEnvelopeLoggingInterceptor - - - Fault: SOAP-ENV:ServerINVALID_CHARACTER_ERR: An invalid or illegal XML character is specified. 2024-07-13T07:21:20,417 [http-nio-8080-exec-7] DEBUG com.sun.xml.messaging.saaj.soap.impl - - - SAAJ0190: Omit XML declaration set to yes 2024-07-13T07:21:20,418 [http-nio-8080-exec-7] DEBUG com.sun.xml.messaging.saaj.soap.impl - - - SAAJ0191: Encoding is set to utf-8 2024-07-13T07:21:20,418 [http-nio-8080-exec-7] TRACE org.springframework.ws.server.MessageTracing.sent - - - Sent response [SOAP-ENV:ServerINVALID_CHARACTER_ERR: An invalid or illegal XML character is specified.] for request [
98243311655600
] 2024-07-13T07:21:20,426 [http-nio-8080-exec-7] DEBUG com.sun.xml.messaging.saaj.soap.impl - - - SAAJ0190: Omit XML declaration set to yes 2024-07-13T07:21:20,426 [http-nio-8080-exec-7] DEBUG com.sun.xml.messaging.saaj.soap.impl - - - SAAJ0191: Encoding is set to utf-8 2024-07-13T07:21:20,428 [http-nio-8080-exec-7] DEBUG org.springframework.ws.transport.http.MessageDispatcherServlet - - - Completed 500 INTERNAL_SERVER_ERROR, headers={masked}
Ниже сгенерированный класс SessionException:
Код: Выделить всё
//
// This file was generated by the Eclipse Implementation of JAXB, v3.0.0
// See https://eclipse-ee4j.github.io/jaxb-ri
// Any modifications to this file will be lost upon recompilation of the source schema.
// Generated on: 2024.07.13 at 08:34:48 AM IST
//
package com.openet.provisioning;
import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlRootElement;
import jakarta.xml.bind.annotation.XmlType;
/**
*
Java class for anonymous complex type.
*
* The following schema fragment specifies the expected content contained within this class.
*
*
* <complexType>
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element name="code" type="{http://www.w3.org/2001/XMLSchema}int"/>
* <element name="message" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
* <element name="reason" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
* </sequence>
* </restriction>
* </complexContent>
* </complexType>
*
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"code",
"message",
"reason"
})
@XmlRootElement(name = "SessionException")
public class SessionException {
protected int code;
protected String message;
protected String reason;
/**
* Gets the value of the code property.
*
*/
public int getCode() {
return code;
}
/**
* Sets the value of the code property.
*
*/
public void setCode(int value) {
this.code = value;
}
/**
* Gets the value of the message property.
*
* @return
* possible object is
* {@link String }
*
*/
public String getMessage() {
return message;
}
/**
* Sets the value of the message property.
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setMessage(String value) {
this.message = value;
}
/**
* Gets the value of the reason property.
*
* @return
* possible object is
* {@link String }
*
*/
public String getReason() {
return reason;
}
/**
* Sets the value of the reason property.
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setReason(String value) {
this.reason = value;
}
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... -invalid-c