Skip to content

Commit

Permalink
20 fix some error on tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Unknow0 committed Nov 15, 2023
1 parent acbd886 commit d39fb2c
Show file tree
Hide file tree
Showing 11 changed files with 134 additions and 75 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public ServletResourceStatic(String path, long lastModified, long size) {
public void init() throws ServletException {
this.mimeType = getServletContext().getMimeType(path);

try (InputStream is = getServletContext().getResourceAsStream(path)) {
try (InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(path)) {
int i = 0, l;
while ((l = is.read(data, i, data.length - i)) > 0)
i += l;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
/**
*
*/
package unknow.server.http.jaxrs;

/**
* @author unknow
*/
public class JaxrsPath {
public final int i;
public final String n;

public JaxrsPath(int i, String n) {
this.i = i;
this.n = n;
}
}
///**
// *
// */
//package unknow.server.http.jaxrs;
//
///**
// * @author unknow
// */
//public class JaxrsPath {
// public final int i;
// public final String n;
//
// public JaxrsPath(int i, String n) {
// this.i = i;
// this.n = n;
// }
//}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,46 @@ public interface PathPattern {

List<String> process(String path);

public static class PathSimple implements PathPattern {
private final boolean last;
private final String[] parts;

public PathSimple(boolean last, String... parts) {
this.parts = parts;
this.last = last;
}

@Override
public List<String> process(String path) {
int o = 0;
List<String> list = new ArrayList<>(parts.length + (last ? 1 : 0));

for (int i = 0; i < parts.length; i++) {
int e = path.indexOf('/', o);
if (e < 0)
return null;
list.add(path.substring(o, e));
o = e + 1;

String s = parts[i];
int l = s.length();
if (!s.regionMatches(0, path, o, l))
return null;
o += l;
}
if (last) {
if (o == path.length())
return null;
int e = path.indexOf('/', o);
if (e > 0)
return null;
list.add(path.substring(o));
} else if (o != path.length())
return null;
return list;
}
}

public static class PathRegexp implements PathPattern {
private final Pattern p;

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -23,19 +23,6 @@
* @author unknow
*/
public class JaxrsReqTest {
public static final Stream<Arguments> path() {
return Stream.of(Arguments.of("path", "/path"), Arguments.of("path", "/path/toto"));
}

// @ParameterizedTest(name = "path {1}")
// @MethodSource
// public void path(String expected, String path) {
// HttpServletRequest r = Mockito.mock(HttpServletRequest.class);
// Mockito.when(r.getRequestURI()).thenReturn(path);
// JaxrsReq req = new JaxrsReq(r, Collections.emptyMap());
// req.initPaths(new JaxrsPath[] { new JaxrsPath(1, "p") });
// assertEquals(expected, req.getPath("p", null, DefaultConvert.STRING));
// }

public static final Stream<Arguments> query() {
return Stream.of(Arguments.of(null, null, null), Arguments.of("d", null, "d"), Arguments.of("d", "a=a", "d"), Arguments.of("n", "n=n", "d"),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package unknow.server.http.jaxrs;

import static org.junit.jupiter.api.Assertions.assertEquals;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;

import unknow.server.http.jaxrs.PathPattern.PathSimple;

public class PathPatternTest {

public static final Stream<Arguments> test() {
//@formatter:off
return Stream.of(
Arguments.of(Arrays.asList("a"), new PathSimple(true), "a"),
Arguments.of(null, new PathSimple(true), "a/b"),
Arguments.of(null, new PathSimple(false, "t"), "t/a"),
Arguments.of(Arrays.asList("a"), new PathSimple(false, "t"), "a/t"),
Arguments.of(null, new PathSimple(false, "t"), "a/ta"),
Arguments.of(null, new PathSimple(true, "t/"), "a/t/"),
Arguments.of(Arrays.asList("a", "b"), new PathSimple(true, "t/"), "a/t/b")
);
//@formatter:on
}

@ParameterizedTest
@MethodSource
public void test(List<String> expected, PathPattern p, String path) {
assertEquals(expected, p.process(path));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ protected AbstractWs(String wsdl) {
public final void init() throws ServletException {
if (wsdl == null)
return;
try (InputStream is = getServletContext().getResourceAsStream(wsdl)) {
try (InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(wsdl)) {
if (is == null)
throw new ServletException("WSDL not found '" + wsdl + "'");
int l;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import com.github.javaparser.ast.expr.AssignExpr;
import com.github.javaparser.ast.expr.AssignExpr.Operator;
import com.github.javaparser.ast.expr.BinaryExpr;
import com.github.javaparser.ast.expr.BooleanLiteralExpr;
import com.github.javaparser.ast.expr.ClassExpr;
import com.github.javaparser.ast.expr.Expression;
import com.github.javaparser.ast.expr.IntegerLiteralExpr;
Expand Down Expand Up @@ -66,6 +67,7 @@
import unknow.server.http.jaxrs.JaxrsReq;
import unknow.server.http.jaxrs.PathPattern;
import unknow.server.http.jaxrs.PathPattern.PathRegexp;
import unknow.server.http.jaxrs.PathPattern.PathSimple;
import unknow.server.maven.TypeCache;
import unknow.server.maven.Utils;
import unknow.server.maven.jaxrs.JaxrsParam.JaxrsBeanParam;
Expand Down Expand Up @@ -413,25 +415,36 @@ private class PatternService implements ServiceBuilder {

void addPath(JaxrsMapping mapping, String path) {
Map<String, Integer> map = new HashMap<>();
StringBuilder sb = new StringBuilder();
StringBuilder sb = new StringBuilder("/");
List<String> parts = new ArrayList<>();
path = path.substring(1);
Matcher m = pa.matcher(path);
int i = 0;
int l = 0;
boolean last = true;
while (m.find()) {
l += m.start() - i;
sb.append(path.substring(i, m.start()).replaceAll("([\\\\.+*\\[\\{])", "\\$1"));
String s = path.substring(i, m.start());
sb.append(s.replaceAll("([\\\\.+*\\[\\{])", "\\$1"));
if (parts != null && !s.isEmpty())
parts.add(s);
map.put(m.group(1), map.size());
if (m.group(2) != null)
if (m.group(2) != null) {
sb.append('(').append(m.group(2)).append(')');
else
parts = null;
} else
sb.append("([^/]+)");
i = m.end();
}
l += path.length() - i;
sb.append(path.substring(i));
if (parts != null && path.length() != i) {
last = false;
parts.add(path.substring(i));
}
// TODO simple split

pattern.computeIfAbsent(new Path(l, sb.toString()), k -> new HashMap<>()).computeIfAbsent(mapping.httpMethod, k -> new ArrayList<>()).add(mapping);
pattern.computeIfAbsent(new Path(l, sb.toString(), parts, last), k -> new HashMap<>()).computeIfAbsent(mapping.httpMethod, k -> new ArrayList<>()).add(mapping);
NameExpr n = params.get(map);
if (!map.isEmpty() && n == null) {
params.put(map, n = new NameExpr("path$" + params.size()));
Expand All @@ -455,8 +468,16 @@ public void build() {
for (Path l : list) {
String n = "p$" + i;

Expression e = new ObjectCreationExpr(null, types.getClass(PathRegexp.class), Utils.list(Utils.text(l.pattern)));
// TODO simple match
Expression e;
if (l.parts == null)
e = new ObjectCreationExpr(null, types.getClass(PathRegexp.class), Utils.list(Utils.text(l.pattern)));
else {
NodeList<Expression> a = Utils.list(new BooleanLiteralExpr(l.last));
for (String s : l.parts)
a.add(Utils.text(s));
e = new ObjectCreationExpr(null, types.getClass(PathSimple.class), a);
}

cl.addFieldWithInitializer(types.get(PathPattern.class), n, e, Utils.PSF);

b.addStatement(new AssignExpr(new NameExpr("l"), new MethodCallExpr(new NameExpr(n), "process", Utils.list(new NameExpr("p"))), Operator.ASSIGN))
Expand Down Expand Up @@ -508,16 +529,22 @@ private void buildService(String name, Map<String, List<JaxrsMapping>> methods)
private static class Path {
private final int length;
private final String pattern;
private final List<String> parts;
private final boolean last;

/**
* create new PathPattern
*
* @param length
* @param pattern
* @param last
* @param parts
*/
public Path(int length, String pattern) {
public Path(int length, String pattern, List<String> parts, boolean last) {
this.length = length;
this.pattern = pattern;
this.parts = parts;
this.last = last;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ else if (o.wrapped)
w++;
}

servlet.addConstructor(Modifier.Keyword.PUBLIC).getBody().addStatement(new MethodCallExpr(null, "super", Utils.list(new StringLiteralExpr("/" + wsdl))));
servlet.addConstructor(Modifier.Keyword.PUBLIC).getBody().addStatement(new MethodCallExpr(null, "super", Utils.list(new StringLiteralExpr(wsdl))));

NodeList<Expression> l = clazz.stream().map(v -> new ClassExpr(types.get(v))).collect(Collectors.toCollection(() -> new NodeList<>()));
servlet.addMethod("getCtx", Utils.PROTECT).addMarkerAnnotation(Override.class).setType(types.get(JAXBContext.class)).getBody().get().addStatement(new TryStmt(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public void add(BuilderContext ctx) {
NodeList<Expression> params = new NodeList<>();
if (s.name.startsWith("Resource:")) {
Resource r = descriptor.resources.get(s.pattern.get(0));
params = Utils.list(Utils.text(s.pattern.get(0)), new LongLiteralExpr(r.getLastModified() + "L"), new LongLiteralExpr(r.getSize() + "L"));
params = Utils.list(Utils.text(s.pattern.get(0).substring(1)), new LongLiteralExpr(r.getLastModified() + "L"), new LongLiteralExpr(r.getSize() + "L"));
}
b.addStatement(Utils.assign(t, n, new ObjectCreationExpr(null, t, Utils.list(Utils.text(s.name), new ObjectCreationExpr(null, types.getClass(s.clazz), params),
Names.CTX, Utils.mapString(s.param, types), Utils.arraySet(s.pattern, types)))));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
/**
* @author unknow
*/
@WebServlet("/*")
@WebServlet("/ws")
public class CxfWs extends CXFNonSpringServlet {
private static final long serialVersionUID = 1L;

Expand Down

0 comments on commit d39fb2c

Please sign in to comment.