【发布时间】:2018-07-13 17:11:16
【问题描述】:
我看到过类似的问题here,但该解决方案对我不起作用,所以我认为我的问题不同。
我已经使用 netbeans 创建了一个简单的 rest 服务,当我从 netbeans 中部署它时,它可以在 url http://localhost:8080/callback/callback/test 上运行,但是一旦我构建了一个 war 文件并将它部署在同一个 Tomcat 实例中,它就会返回错误 404 resource not成立。我不确定该怎么做才能让 Tomcat 识别 URL。
我的应用配置:
import java.util.Set;
import javax.ws.rs.core.Application;
@javax.ws.rs.ApplicationPath("callback")
public class ApplicationConfig extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> resources = new java.util.HashSet<>();
addRestResourceClasses(resources);
return resources;
}
private void addRestResourceClasses(Set<Class<?>> resources) {
resources.add(com.orig.callback.Origafric.class);
}
}
我的服务等级:
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.Produces;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.QueryParam;
@Path("/test")
public class Origafric {
public Origafric() {
}
/**
* Retrieves representation of an instance of com.orig.callback.Origafric
*
* @param provider
* @param clientAccount
* @param productName
* @param phoneNumber
* @param value
* @param providerMetadata
* @return an instance of java.lang.String
* @throws java.io.IOException
*/
@GET
@Produces("application/json")
public List<ValidationResult> getTransactions(@QueryParam("provider") String provider,
@QueryParam("clientAccount") String clientAccount, @QueryParam("productName") String productName,
@QueryParam("phoneNumber") String phoneNumber, @QueryParam("value") String value,
@QueryParam("providerMetadata") String providerMetadata) throws IOException {
List<ValidationResult> list = new ArrayList<>();
ValidationResult res = new ValidationResult();
res.setProvider(provider);
res.setClientAccount(clientAccount);
res.setProductName(productName);
res.setPhoneNumber(phoneNumber);
res.setValue(value);
res.setProviderMetadata(providerMetadata);
list.add(res);
String homeDir = System.getProperty("user.home") + File.separator + "callback";
File f = new File(homeDir);
if (!f.exists()) {
f.mkdir();
}
File logfile = new File(f.getAbsolutePath() + File.separator + "results.log");
FileWriter out = new FileWriter(logfile, true);
for (ValidationResult el : list) {
out.write(el.getProvider() + "\n");
out.write(el.getClientAccount() + "\n");
out.write(el.getProductName() + "\n");
out.write(el.getPhoneNumber() + "\n");
out.write(el.getValue() + "\n");
out.write(el.getProviderMetadata() + "\n");
out.flush();
}
return list;
}
}
还有我的 web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<display-name>RestExample</display-name>
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>de.jay.jersey.first</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
ValidationResult 是我价值观的吸气剂。我在这里错过了什么?
【问题讨论】:
-
war文件的名称是什么?您将其命名为 ROOT.war 对吗?
-
不,war文件是
callback.war -
如何部署 WAR 文件?马文? Tomcat Web 应用程序管理器?
-
@braunpet Tomcat Web 应用程序管理器。
-
我猜想WAR文件中缺少库。您能否扩展您的问题以显示
WEB-INF/lib的内容。请仔细检查部署 WAR 文件是否成功。您无法使用 Web App Manager 重新部署。
标签: java rest tomcat netbeans jax-rs