org.openntf.xsp.jakartaee icon indicating copy to clipboard operation
org.openntf.xsp.jakartaee copied to clipboard

Missing MessageBodyWriter for XML

Open tadrian opened this issue 1 year ago • 1 comments

I am trying to return XML instead of the JSON from a map or a list but I get error. below is a changed version of the DominoObjectsSample class in example db

@Path("dominoObjects")
public class DominoObjectsSample {
	@Inject
	Database database;
	
	@Inject
	@Named("dominoSession")
	Session session;
	
	@Inject
	@Named("dominoSessionAsSigner")
	Session sessionAsSigner;
	
	@Inject
	@Named("dominoSessionAsSignerWithFullAccess")
	Session sessionAsSignerWithFullAccess;
	
	@Path("/json")
	@GET
	@Produces(MediaType.APPLICATION_JSON)
	public Map<String, Object> getJson() {
		Map<String, Object> result = new HashMap<>();
		result.put("database", toString(database));
		result.put("dominoSession", toString(session));
		result.put("dominoSessionAsSigner", toString(sessionAsSigner));
		result.put("dominoSessionAsSignerWithFullAccess", toString(sessionAsSignerWithFullAccess));
		return result;
	}

	@Path("/xml")
	@GET
	@Produces({ MediaType.APPLICATION_XML, MediaType.TEXT_XML })
	public Map<String, Object> getXml() {
		Map<String, Object> result = new HashMap<>();
		result.put("database", toString(database));
		result.put("dominoSession", toString(session));
		result.put("dominoSessionAsSigner", toString(sessionAsSigner));
		result.put("dominoSessionAsSignerWithFullAccess", toString(sessionAsSignerWithFullAccess));
		return result;
	}
	
	@Path("/xml2")
	@GET
	@Produces({ MediaType.APPLICATION_XML, MediaType.TEXT_XML })
	public List<Person> getXml2() {
		
		List<Person> personList = new ArrayList<Person>();
		personList.add(new Person("A1","A2"));
		personList.add(new Person("b1","b2"));
		return personList;
	}

	private String toString(Object obj) {
		if(obj == null) {
			return "null";
		} else {
			return obj.getClass().getName() + "@" + Integer.toHexString(obj.hashCode());
		}
	}
	
	public class Person{
		
		String firstName = "";
		String lastname = "";
		
		public Person(String firstName, String lastname) {
			super();
			this.firstName = firstName;
			this.lastname = lastname;
		}

		public String getFirstName() {
			return firstName;
		}

		public void setFirstName(String firstName) {
			this.firstName = firstName;
		}

		public String getLastname() {
			return lastname;
		}

		public void setLastname(String lastname) {
			this.lastname = lastname;
		}
		
		
		
	}
}


{
    "message": "org.jboss.resteasy.core.NoMessageBodyWriterFoundFailure: Could not find MessageBodyWriter for response object of type: java.util.ArrayList of media type: application/xml;charset=UTF-8",
    "stackTrace": [
        [
            "org.jboss.resteasy.core.NoMessageBodyWriterFoundFailure: Could not find MessageBodyWriter for response object of type: java.util.ArrayList of media type: application/xml;charset=UTF-8",
            "  at org.jboss.resteasy.core.ServerResponseWriter.lambda$writeNomapResponse$3(ServerResponseWriter.java:125)",
            "  at org.jboss.resteasy.core.interception.jaxrs.ContainerResponseContextImpl.filter(ContainerResponseContextImpl.java:410)",
            "  at org.jboss.resteasy.core.ServerResponseWriter.executeFilters(ServerResponseWriter.java:252)",
            "  at org.jboss.resteasy.core.ServerResponseWriter.writeNomapResponse(ServerResponseWriter.java:101)",
            "  at org.jboss.resteasy.core.ServerResponseWriter.writeNomapResponse(ServerResponseWriter.java:74)",
            "  at org.jboss.resteasy.core.SynchronousDispatcher.writeResponse(SynchronousDispatcher.java:594)",
            "  at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:524)",
            "  at org.jboss.resteasy.core.SynchronousDispatcher.lambda$invoke$4(SynchronousDispatcher.java:261)",
            "  at org.jboss.resteasy.core.SynchronousDispatcher.lambda$preprocess$0(SynchronousDispatcher.java:161)",
            "  at org.jboss.resteasy.core.interception.jaxrs.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:364)",
            "  at org.jboss.resteasy.core.SynchronousDispatcher.preprocess(SynchronousDispatcher.java:164)",
            "  at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:247)",
            "  at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:249)",
            "  at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:60)",
            "  at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55)",
            "  at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:587)",
            "  at org.openntf.xsp.jaxrs.impl.FacesJAXRSServletContainer.doService(FacesJAXRSServletContainer.java:92)",
            "  at org.openntf.xsp.jakartaee.AbstractXspLifecycleServlet.service(AbstractXspLifecycleServlet.java:130)",
            "  at org.openntf.xsp.jaxrs.impl.FacesJAXRSServletContainer.service(FacesJAXRSServletContainer.java:66)",
            "  at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:587)",
            "  at org.openntf.xsp.jakartaee.servlet.NewHttpServletWrapper.service(NewHttpServletWrapper.java:112)",
            "  at com.ibm.designer.runtime.domino.adapter.ComponentModule.invokeServlet(ComponentModule.java:600)",
            "  at com.ibm.domino.xsp.module.nsf.NSFComponentModule.invokeServlet(NSFComponentModule.java:1352)",
            "  at com.ibm.designer.runtime.domino.adapter.ComponentModule$AdapterInvoker.invokeServlet(ComponentModule.java:877)",
            "  at com.ibm.designer.runtime.domino.adapter.ComponentModule$ServletInvoker.doService(ComponentModule.java:820)",
            "  at com.ibm.designer.runtime.domino.adapter.ComponentModule.doService(ComponentModule.java:589)",
            "  at com.ibm.domino.xsp.module.nsf.NSFComponentModule.doService(NSFComponentModule.java:1336)",
            "  at com.ibm.domino.xsp.module.nsf.NSFService.doServiceInternal(NSFService.java:725)",
            "  at com.ibm.domino.xsp.module.nsf.NSFService.doService(NSFService.java:515)",
            "  at com.ibm.designer.runtime.domino.adapter.LCDEnvironment.doService(LCDEnvironment.java:371)",
            "  at com.ibm.designer.runtime.domino.adapter.LCDEnvironment.service(LCDEnvironment.java:327)",
            "  at com.ibm.domino.xsp.bridge.http.engine.XspCmdManager.service(XspCmdManager.java:302)"
        ]
    ]
}

https://poe.com/s/xKDkeJ6TAP5Xo5m6vhGm

tadrian avatar Jul 25 '23 09:07 tadrian