anonymous Log in
Search
Recents:
v3.0
java-l
SDT opcional en un servicio REST
22/03/21 22:04

ogerke

Replies: 2

Estoy queriendo proveer un servicio REST que soporte indistintamente estos
2 JSON:
{
"Var1": 3,
"Var2": "HOLA",
"SDT1": {
"Var3": "",
"Var4": "",
"Var5": ""
}
}
y
{
"Var1": 3,
"Var2": "HOLA",
}
}
Cuando invoco la opcion 1 funciona sin problema, tambien funciona si invoco:
{
"Var1": 3,
"Var2": "HOLA",
"SDT1": {
}
}
Pero si evito la cabecera del SDT me da este error:
<!doctype html>
<html lang="en">
<head>
<title>HTTP Status 500 – Internal Server Error</title>
<style type="text/css">
body {
font-family: Tahoma, Arial, sans-serif;
}
h1,
h2,
h3,
b {
color: white;
background-color: #525D76;
}
h1 {
font-size: 22px;
}
h2 {
font-size: 16px;
}
h3 {
font-size: 14px;
}
p {
font-size: 12px;
}
a {
color: black;
}
.line {
height: 1px;
background-color: #525D76;
border: none;
}
</style>
</head>
<body>
<h1>HTTP Status 500 – Internal Server Error</h1>
<hr class="line" />
<p><b>Type</b> Exception Report</p>
<p><b>Message</b> java.lang.NullPointerException</p>
<p><b>Description</b>
The server encountered an unexpected condition that prevented it from
fulfilling the request.
</p>
<p><b>Exception</b></p>
<pre>javax.servlet.ServletException: java.lang.NullPointerException
org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:489)
org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
com.genexus.filters.ExpiresFilter.doFilter(ExpiresFilter.java:1241)
</pre>
<p><b>Root Cause</b></p>
<pre>java.lang.NullPointerException
com.parks.dos_services_rest.execute(dos_services_rest.java:41)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81)
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:144)
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:161)
org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:160)
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:99)
org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:389)
org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:347)
org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:102)
org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:326)
org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
org.glassfish.jersey.internal.Errors.process(Errors.java:315)
org.glassfish.jersey.internal.Errors.process(Errors.java:297)
org.glassfish.jersey.internal.Errors.process(Errors.java:267)
org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317)
org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305)
org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154)
org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:473)
org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
com.genexus.filters.ExpiresFilter.doFilter(ExpiresFilter.java:1241)
</pre>
<p><b>Note</b>
The full stack trace of the root cause is available in the server logs.</p>
<hr class="line" />
<h3>Apache Tomcat/9.0.37</h3>
</body>
</html>
Desde ya muchas gracias,
--
Lic. Osmar Gerke
Cel. (595-981) 424613
Visite el sitio de CPTLN en www.cptln.org.py
Ayude a CPTLN utilizando el buscador www.goodsearch.com favoreciendo a
Lutheran Hour Ministries.
-----------------------------------------
Para Suscribirse/Desuscribirse:
http://www.gxtechnical.com/cgi-bin/hforum.exe?2,3,30,20
Por consultas owner-java-l@gxtech.com.uy
Replies

Google

23/03/21 12:58
Hola Osmar, Así funciona la validación en rest. Tu alternativa sería recibir un parámetro de entrada de tipo STRING pIN con formato JSON, que luego deberías importar asi: SDT.fromstring( pIN ) De esta forma te funcionaria de ambas maneras: 1. Incluyendo la definición del SDT 2. Sin hacer referencia al SDT. Saludos, Alberto Fernandez El lun, 22 mar 2021 a las 22:04, Osmar Gerke ()

demetole

24/03/21 10:39
Hola Osmar. Puedes crear una SDT que contenga las dos SDT y un campo donde envias un valor que te referencie si es una u otra estructura la que tienes valores. {     "tipo":"1",     {         "Var1": 3,         "Var2": "HOLA",         "SDT1":         {             "Var3": "",             "Var4": "",             "Var5": ""         }     }     {         "Var1": 3,         "Var2": "HOLA",     } } Me comentas como te fue. Un Abrazo Demetrio El 23/03/2021 a las 17:45, Osmar Gerke


Back to java-l