2023-09-26

This commit is contained in:
name
2023-09-27 11:34:23 +00:00
parent e4fc871937
commit 72d8b4e6be
101 changed files with 3032 additions and 1934 deletions

View File

@ -0,0 +1 @@
ErrorDocument 404 /404.html

View File

@ -1,9 +1,4 @@
/**
* @license
* SPDX-License-Identifier: AGPL-3.0-or-later
* This file is part of Wolfree.
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*/
/* SPDX-License-Identifier: AGPL-3.0-or-later */
.wolfree-placeholder {
display: flex;

View File

@ -1,9 +1,4 @@
/**
* @license
* SPDX-License-Identifier: AGPL-3.0-or-later
* This file is part of Wolfree.
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*/
/* SPDX-License-Identifier: AGPL-3.0-or-later */
.wolfree-pods {
display: flex;

View File

@ -1,56 +0,0 @@
/**
* @license
* SPDX-License-Identifier: AGPL-3.0-or-later
* This file is part of Wolfree.
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*/
// @ts-check
import SearchParams from "./SearchParams.js";
export default class AJAX {
ajax = async ({
input = String(),
i2d = Boolean(),
extraPodstates = Array(),
} = {}) => {
try {
const data = new SearchParams().getSearchParams({
input,
extraPodstates,
i2d,
});
const options = {
url: "https://api.wolframalpha.com/v2/query",
dataType: "jsonp",
traditional: true,
data,
};
try {
/**
* https://www.npmjs.com/package/@types/jquery
* @type {import('jQuery')}
*/
const response = await jQuery.ajax(options);
return (
console.assert(response instanceof Object),
console.assert(response.hasOwnProperty("queryresult")),
{ response }
);
} catch (error) {
return (
console.error(
{ error },
"We encountered an issue while attempting to retrieve a response from the Wolfram Alpha API using the jQuery library."
),
{ error }
);
}
} catch (error) {
return console.error({ error }), { error };
}
};
}

View File

@ -1,57 +0,0 @@
/**
* @license
* SPDX-License-Identifier: AGPL-3.0-or-later
* This file is part of Wolfree.
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*/
// @ts-check
// To generate a new AppID:
// 1. Open Tor Browser and go to: https://products.wolframalpha.com/api/
// 2. Click the orangish "Get API Access" button. You will go to: https://account.wolfram.com/login/oauth2/sign-in
// 3. Click the reddish "Create one" hyperlink to create a new Wolfram ID. You will go to: https://account.wolfram.com/login/create
// 4. Fill out the form using random alphanumeric characters.
// 5. Click the reddish "Create Wolfram ID" button. You will go to: https://developer.wolframalpha.com/portal/myapps/index.html
// 6. Click the orangish "Sign up to get your first AppID" button.
// 7. Fill out the form using random alphanumeric characters.
// 8. Click the orangish "Sign up" button.
// 9. Click the orangish "Get an AppID" button.
// 10. Fill out the form using random alphanumeric characters.
// 11. Click the orangish "Get AppID" button.
export default class AppID {
appIDArray = Array();
constructor(
appIDArray = ["H9V325-HTALUWHKGK", "AKJTJT-LR5LL8WTG6", "LKY83U-XW6ATU9URU"]
) {
(this.appIDArray = appIDArray),
Array.from(this.appIDArray).forEach(
(appID) => (
console.assert(17 === appID.length),
console.assert(/[0-9A-Z]{6}-[0-9A-Z]{10}/.test(appID))
)
);
}
getAppID = ({
appID = this.appIDArray[this.getRandomInt() % this.appIDArray.length],
} = {}) => {
try {
return appID;
} catch (error) {
return console.error({ error }), String();
}
};
getRandomInt = ({
randomInt = crypto.getRandomValues(new Uint32Array(1))[0],
} = {}) => {
try {
return randomInt;
} catch (error) {
return console.error({ error }), Number();
}
};
}

View File

@ -1,26 +0,0 @@
/**
* @license
* SPDX-License-Identifier: AGPL-3.0-or-later
* This file is part of Wolfree.
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*/
// @ts-check
import Processor from "./Processor.js";
import Preprocessor from "./Preprocessor.js";
import PostProcessor from "./PostProcessor.js";
export default async ({
input = String(),
i2d = Boolean(),
extraPodstates = Array(),
} = {}) => {
try {
new Preprocessor().process();
await new Processor().process({ input, i2d, extraPodstates });
new PostProcessor().process({ input, i2d });
} catch (error) {
console.error({ error });
}
};

View File

@ -1,69 +0,0 @@
/**
* @license
* SPDX-License-Identifier: AGPL-3.0-or-later
* This file is part of Wolfree.
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*/
// @ts-check
export default class Placeholder {
className = "wolfree-placeholder";
placeholderHTML = `
<div class="${this.className}">
<div>
<div>
<div><div></div></div>
<div><div></div></div>
<div><div></div></div>
</div>
</div>
</div>
`;
insert = ({
container = document.querySelector(
"html > body > #__next > div > main > main > div:nth-of-type(1)"
),
} = {}) => {
try {
return (
container instanceof HTMLDivElement
? container.insertAdjacentHTML("afterend", this.placeholderHTML)
: console.error({ container }),
{ container }
);
} catch (error) {
return (
console.error(
{ error },
"Fail to insert the skeleton placeholder components."
),
{ error }
);
}
};
remove = ({
allPlaceholders = document.querySelectorAll(
`html > body > #__next > div > main > main > div.${this.className}`
),
} = {}) => {
try {
return (
console.assert(allPlaceholders.length === 1),
allPlaceholders.forEach((placeholder) => placeholder.remove()),
{ allPlaceholders }
);
} catch (error) {
return (
console.error(
{ error },
"Fail to remove the skeleton placeholder components."
),
{ error }
);
}
};
}

View File

@ -1,56 +0,0 @@
/**
* @license
* SPDX-License-Identifier: AGPL-3.0-or-later
* This file is part of Wolfree.
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*/
// @ts-check
export default class Pods {
insert = ({
container = document.querySelector("main > div:nth-of-type(1)"),
html = String(),
} = {}) => {
try {
/**
* https://www.npmjs.com/package/@types/dompurify
* @type {import('DOMPurify')}
*/
return (
container instanceof HTMLDivElement
? container.insertAdjacentHTML(
"afterend",
globalThis.DOMPurify.sanitize(html)
)
: console.error({ container }),
{ container, html }
);
} catch (error) {
return (
console.error(
{ error },
"Fail to insert the results of the calculation."
),
{ error }
);
}
};
remove = ({
pods = document.querySelectorAll("main > div.wolfree-pods"),
} = {}) => {
try {
pods.forEach((element) => {
element.remove();
});
return { pods };
} catch (error) {
console.error(
"Fail to remove the results of the previous calculation.",
error
);
return { error };
}
};
}

View File

@ -1,201 +0,0 @@
/**
* @license
* SPDX-License-Identifier: AGPL-3.0-or-later
* This file is part of Wolfree.
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*/
// @ts-check
export default class PodsParser {
parse = ({
input = String(),
i2d = Boolean(),
extraPodstates = Array(),
response = { queryresult: { pods: Array() } },
} = {}) => {
try {
return { html: this.buildHTML({ input, i2d, extraPodstates, response }) };
} catch (error) {
return console.error({ error }), { error };
}
};
buildHTML = ({
input = String(),
i2d = Boolean(),
extraPodstates = Array(),
response = { queryresult: { pods: Array() } },
} = {}) => {
return `
<div class="wolfree-pods">
<div>
<div>
<section>
${this.parseQueryResult({ response })}
${this.buildTechnicalInfo({
input,
i2d,
extraPodstates,
response,
})}
</section>
</div>
</div>
</div>
`;
};
parseQueryResult = ({ response = { queryresult: { pods: Array() } } }) => {
const { queryresult } = response;
const { pods } = queryresult;
if (pods) {
return pods.map(this.parsePod).join("");
}
return "";
};
parsePod = (
pod = {
title: String(),
states: Array(),
subpods: Array(),
}
) => {
return `
<section>
${this.buildPodHeader(pod)}
<div></div>
${pod.subpods.map(this.buildSubpod).join("")}
</section>
`;
};
buildPodHeader = (pod = { title: String(), states: Array() }) => {
return `
<div>
<h2>${this.escapeHTML(pod.title)}</h2>
${pod.states ? pod.states.map(this.buildSelectElement).join("") : ""}
</div>
`;
};
buildSubpod = (
subpod = { img: { src: String(), alt: String() }, plaintext: String() }
) => {
return `
<div><div>
<img
src="${this.escapeHTML(subpod.img.src)}"
alt="${this.escapeHTML(subpod.img.alt)}"
>
</div></div>
<div style="font-family: monospace; overflow: auto;">
<div><div>${this.buildSubpodDetails(subpod)}</div></div>
</div>
`;
};
buildSubpodDetails = (subpod = { plaintext: String() }) => {
return `
<details>
<summary style="direction: rtl;"></summary>
<div><pre>${this.escapeHTML(subpod.plaintext)}</pre></div>
<br>
</details>
`;
};
buildSelectElement = (state = { value: String(), states: Array() }) => {
if (state.states) {
return `
<select name="pod-states">
<option>${this.escapeHTML(state.value)}</option>
${state.states.map(this.buildOption).join("")}
</select>
`;
}
return "";
};
buildOption = (state = { name: String() }) => {
return `
<option>${this.escapeHTML(state.name)}</option>
`;
};
buildTechnicalInfo = ({
input = String(),
i2d = Boolean(),
extraPodstates = Array(),
response = { queryresult: { pods: Array() } },
}) => {
return `
<section>
<div><h2>Technical information</h2></div>
<div></div>
<div><div><div>${this.buildTechnicalInfoDetails({
input,
i2d,
extraPodstates,
response,
})}</div></div></div>
<div></div>
</section>
`;
};
buildTechnicalInfoDetails = ({
input = String(),
i2d = Boolean(),
extraPodstates = Array(),
response = { queryresult: { pods: Array() } },
}) => {
return `
<details>
<div>
If you have programming knowledge, feel free to explore the technical information provided below:
</div>
${this.buildTextarea({ input, i2d, extraPodstates, response })}
</details>
`;
};
buildTextarea = ({
input = String(),
i2d = Boolean(),
extraPodstates = Array(),
response = { queryresult: { pods: Array() } },
}) => {
return `
<textarea name="technical-information">${this.escapeHTML(
JSON.stringify(
{
document,
input,
i2d,
extraPodstates,
response,
},
null,
4
)
)}</textarea>
`;
};
escapeHTML = (unsafe = String()) => {
return unsafe
.replace(/&/g, "&amp;")
.replace(/</g, "&lt;")
.replace(/>/g, "&gt;")
.replace(/"/g, "&quot;")
.replace(/'/g, "&#039;");
};
}
// Can I escape HTML special chars in JavaScript? - Stack Overflow
// https://stackoverflow.com/questions/6234773/can-i-escape-html-special-chars-in-javascript
// test case:
// https://www.wolframalpha.com/input?i=solve+%7By%27%28x%29+%3D+-2+y%2C+y%280%29%3D1%7D+from+0+to+10+using+r+k+f+algorithm

View File

@ -1,63 +0,0 @@
/**
* @license
* SPDX-License-Identifier: AGPL-3.0-or-later
* This file is part of Wolfree.
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*/
// @ts-check
import Placeholder from "./Placeholder.js";
import Entrypoint from "./Entrypoint.js";
export default class PostProcessor {
process = ({ input = String(), i2d = Boolean() } = {}) => {
try {
new Placeholder().remove();
try {
document
.querySelectorAll(
"html > body > div#__next > div > main > main > div.wolfree-pods > div > div > section > section > div > div > div > details > div"
)
.forEach((element = new HTMLElement()) =>
element.setAttribute("contenteditable", "")
);
} catch (error) {
console.error(
"Fail to make the plaintext in details tags easy to copy.",
error
);
}
try {
document
.querySelectorAll(
"html > body > div#__next > div > main > main > div.wolfree-pods > div > div > section > section > div:is(:first-child) > select"
)
.forEach((element = new HTMLSelectElement()) =>
element.addEventListener(
"change",
async (event = new Event(String())) =>
Entrypoint({
input,
i2d,
extraPodstates: [
event.target instanceof HTMLSelectElement
? event.target.value
: (console.error({ event }), String()),
],
})
)
);
} catch (error) {
console.error(
"Fail to set up the drop-down menu for problem-solving strategies.",
error
);
}
} catch (error) {
console.error({ error });
}
};
}

View File

@ -1,29 +0,0 @@
/**
* @license
* SPDX-License-Identifier: AGPL-3.0-or-later
* This file is part of Wolfree.
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*/
// @ts-check
import Placeholder from "./Placeholder.js";
import Pods from "./Pods.js";
export default class Preprocessor {
process = () => {
try {
try {
window.scroll(0, 0);
} catch (error) {
console.error({ error }, "Fail to scroll to the top of the webpage.");
}
new Placeholder().insert();
new Pods().remove();
} catch (error) {
console.error({ error });
}
};
}

View File

@ -1,54 +0,0 @@
/**
* @license
* SPDX-License-Identifier: AGPL-3.0-or-later
* This file is part of Wolfree.
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*/
// @ts-check
import AJAX from "./AJAX.js";
import PodsParser from "./PodsParser.js";
import Pods from "./Pods.js";
export default class Processor {
process = async ({
input = String(),
i2d = Boolean(),
extraPodstates = Array(),
} = {}) => {
try {
const { response } = await new AJAX().ajax({
input,
i2d,
extraPodstates,
});
try {
const { html } = new PodsParser().parse({
input,
i2d,
extraPodstates,
/** @type {any} */
response,
});
try {
new Pods().remove();
} catch (error) {
console.error(error);
}
try {
new Pods().insert({ html });
} catch (error) {
console.error(error);
}
} catch (error) {
console.error(error);
}
} catch (error) {
console.error(error);
}
};
}

View File

@ -1,44 +0,0 @@
/**
* @license
* SPDX-License-Identifier: AGPL-3.0-or-later
* This file is part of Wolfree.
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*/
// @ts-check
import AppID from "./AppID.js";
export default class SearchParams {
constructor({ getAppID = new AppID().getAppID } = {}) {
this.getAppID = getAppID;
}
getSearchParams = ({
input = String(),
i2d = Boolean(),
extraPodstates = Array(),
} = {}) => {
const appid = this.getAppID();
return {
...(appid && { appid }),
...(input && { input }),
...(i2d && { i2d }),
podstate: [
"Step-by-step solution",
"Step-by-step",
"Show all steps",
...extraPodstates,
// Note: extraPodstates must be the last item in the array.
// Otherwise, the Wolfram Alpha API may ignore the pod states in extraPodstates.
],
output: "json",
reinterpret: true,
podtimeout: 30,
scantimeout: 30,
parsetimeout: 30,
totaltimeout: 30,
formattimeout: 30,
};
};
}

View File

@ -1,51 +0,0 @@
/**
* @license
* SPDX-License-Identifier: AGPL-3.0-or-later
* This file is part of Wolfree.
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*/
// @ts-check
export default addEventListener(
"load",
() => (
setTimeout(
() =>
document
.querySelectorAll(
"html > body > #__next > div > main > main > div > div > section > form > div > div > input"
)
.forEach((input) =>
input instanceof HTMLInputElement
? input.focus()
: console.error({ input })
),
1000
),
[
() =>
document
.querySelectorAll(
'html > body > #__next > div > main > main > div > div > div > section > section > div:is(:first-child) > ul > li'
)
.forEach(
(li) =>
li.innerHTML.includes("Step-by-step") &&
(li instanceof HTMLElement
? (li.style.display = "none")
: console.error({ li }))
),
() =>
(document.title = document.title.replace(
"- Wolfram|Alpha",
"- Free Wolfram|Alpha Step-by-step Solution - Wolfree"
)),
].forEach(
(callback) => (
setInterval(callback, 2000), addEventListener("click", callback)
)
),
scroll(0, 0)
)
);

View File

@ -39,4 +39,4 @@
"i2p": [],
"loki": []
}
}
}

View File

@ -0,0 +1,5 @@
{
"query": "",
"instantMath": null,
"results": []
}

View File

@ -0,0 +1,14 @@
{
"en": {
"id": 0,
"query": ""
},
"ja": {
"id": 0,
"query": ""
},
"es": {
"id": 0,
"query": ""
}
}

View File

@ -0,0 +1,12 @@
[
{
"name": "",
"display": [
{
"type": "",
"value": ""
}
],
"url": ""
}
]

View File

@ -0,0 +1,10 @@
[
{
"name": "",
"value": {
"primarySourceItems": [],
"title": "",
"items": []
}
}
]

View File

@ -0,0 +1,388 @@
{
"message": "Invalid request",
"internalCode": 1,
"httpCode": 500,
"arguments": {},
"cause": null,
"stackTrace": [
{
"methodName": "filter_aroundBody12",
"fileName": "AuthFilter.scala",
"lineNumber": 47,
"className": "com.wolframalpha.common.filters.AuthFilter",
"nativeMethod": false
},
{
"methodName": "filter_aroundBody13$advice",
"fileName": "AuthFilter.scala",
"lineNumber": 49,
"className": "com.wolframalpha.common.filters.AuthFilter",
"nativeMethod": false
},
{
"methodName": "filter_aroundBody14",
"fileName": "AuthFilter.scala",
"lineNumber": 1,
"className": "com.wolframalpha.common.filters.AuthFilter",
"nativeMethod": false
},
{
"methodName": "filter_aroundBody15$advice",
"fileName": "AuthFilter.scala",
"lineNumber": 28,
"className": "com.wolframalpha.common.filters.AuthFilter",
"nativeMethod": false
},
{
"methodName": "filter_aroundBody16",
"fileName": "AuthFilter.scala",
"lineNumber": 1,
"className": "com.wolframalpha.common.filters.AuthFilter",
"nativeMethod": false
},
{
"methodName": "filter_aroundBody17$advice",
"fileName": "AuthFilter.scala",
"lineNumber": 25,
"className": "com.wolframalpha.common.filters.AuthFilter",
"nativeMethod": false
},
{
"methodName": "filter",
"fileName": "AuthFilter.scala",
"lineNumber": 1,
"className": "com.wolframalpha.common.filters.AuthFilter",
"nativeMethod": false
},
{
"methodName": "apply",
"fileName": "ContainerFilteringStage.java",
"lineNumber": 171,
"className": "org.glassfish.jersey.server.ContainerFilteringStage",
"nativeMethod": false
},
{
"methodName": "apply",
"fileName": "ContainerFilteringStage.java",
"lineNumber": 74,
"className": "org.glassfish.jersey.server.ContainerFilteringStage",
"nativeMethod": false
},
{
"methodName": "process",
"fileName": "Stages.java",
"lineNumber": 197,
"className": "org.glassfish.jersey.process.internal.Stages",
"nativeMethod": false
},
{
"methodName": "run",
"fileName": "ServerRuntime.java",
"lineNumber": 250,
"className": "org.glassfish.jersey.server.ServerRuntime$1",
"nativeMethod": false
},
{
"methodName": "call",
"fileName": "Errors.java",
"lineNumber": 271,
"className": "org.glassfish.jersey.internal.Errors$1",
"nativeMethod": false
},
{
"methodName": "call",
"fileName": "Errors.java",
"lineNumber": 267,
"className": "org.glassfish.jersey.internal.Errors$1",
"nativeMethod": false
},
{
"methodName": "process",
"fileName": "Errors.java",
"lineNumber": 315,
"className": "org.glassfish.jersey.internal.Errors",
"nativeMethod": false
},
{
"methodName": "process",
"fileName": "Errors.java",
"lineNumber": 297,
"className": "org.glassfish.jersey.internal.Errors",
"nativeMethod": false
},
{
"methodName": "process",
"fileName": "Errors.java",
"lineNumber": 267,
"className": "org.glassfish.jersey.internal.Errors",
"nativeMethod": false
},
{
"methodName": "runInScope",
"fileName": "RequestScope.java",
"lineNumber": 319,
"className": "org.glassfish.jersey.process.internal.RequestScope",
"nativeMethod": false
},
{
"methodName": "process",
"fileName": "ServerRuntime.java",
"lineNumber": 236,
"className": "org.glassfish.jersey.server.ServerRuntime",
"nativeMethod": false
},
{
"methodName": "handle",
"fileName": "ApplicationHandler.java",
"lineNumber": 1028,
"className": "org.glassfish.jersey.server.ApplicationHandler",
"nativeMethod": false
},
{
"methodName": "service",
"fileName": "WebComponent.java",
"lineNumber": 373,
"className": "org.glassfish.jersey.servlet.WebComponent",
"nativeMethod": false
},
{
"methodName": "service",
"fileName": "ServletContainer.java",
"lineNumber": 381,
"className": "org.glassfish.jersey.servlet.ServletContainer",
"nativeMethod": false
},
{
"methodName": "service",
"fileName": "ServletContainer.java",
"lineNumber": 344,
"className": "org.glassfish.jersey.servlet.ServletContainer",
"nativeMethod": false
},
{
"methodName": "service",
"fileName": "ServletContainer.java",
"lineNumber": 219,
"className": "org.glassfish.jersey.servlet.ServletContainer",
"nativeMethod": false
},
{
"methodName": "internalDoFilter",
"fileName": "ApplicationFilterChain.java",
"lineNumber": 303,
"className": "org.apache.catalina.core.ApplicationFilterChain",
"nativeMethod": false
},
{
"methodName": "doFilter",
"fileName": "ApplicationFilterChain.java",
"lineNumber": 208,
"className": "org.apache.catalina.core.ApplicationFilterChain",
"nativeMethod": false
},
{
"methodName": "doFilter",
"fileName": "WsFilter.java",
"lineNumber": 52,
"className": "org.apache.tomcat.websocket.server.WsFilter",
"nativeMethod": false
},
{
"methodName": "internalDoFilter",
"fileName": "ApplicationFilterChain.java",
"lineNumber": 241,
"className": "org.apache.catalina.core.ApplicationFilterChain",
"nativeMethod": false
},
{
"methodName": "doFilter",
"fileName": "ApplicationFilterChain.java",
"lineNumber": 208,
"className": "org.apache.catalina.core.ApplicationFilterChain",
"nativeMethod": false
},
{
"methodName": "doFilter",
"fileName": "MonitoringFilter.java",
"lineNumber": 232,
"className": "net.bull.javamelody.MonitoringFilter",
"nativeMethod": false
},
{
"methodName": "doFilter",
"fileName": "MonitoringFilter.java",
"lineNumber": 209,
"className": "net.bull.javamelody.MonitoringFilter",
"nativeMethod": false
},
{
"methodName": "internalDoFilter",
"fileName": "ApplicationFilterChain.java",
"lineNumber": 241,
"className": "org.apache.catalina.core.ApplicationFilterChain",
"nativeMethod": false
},
{
"methodName": "doFilter",
"fileName": "ApplicationFilterChain.java",
"lineNumber": 208,
"className": "org.apache.catalina.core.ApplicationFilterChain",
"nativeMethod": false
},
{
"methodName": "invoke",
"fileName": "StandardWrapperValve.java",
"lineNumber": 220,
"className": "org.apache.catalina.core.StandardWrapperValve",
"nativeMethod": false
},
{
"methodName": "invoke",
"fileName": "StandardContextValve.java",
"lineNumber": 122,
"className": "org.apache.catalina.core.StandardContextValve",
"nativeMethod": false
},
{
"methodName": "invoke",
"fileName": "AuthenticatorBase.java",
"lineNumber": 501,
"className": "org.apache.catalina.authenticator.AuthenticatorBase",
"nativeMethod": false
},
{
"methodName": "invoke",
"fileName": "StandardHostValve.java",
"lineNumber": 170,
"className": "org.apache.catalina.core.StandardHostValve",
"nativeMethod": false
},
{
"methodName": "invoke",
"fileName": "ErrorReportValve.java",
"lineNumber": 98,
"className": "org.apache.catalina.valves.ErrorReportValve",
"nativeMethod": false
},
{
"methodName": "invoke",
"fileName": "AccessLogValve.java",
"lineNumber": 950,
"className": "org.apache.catalina.valves.AccessLogValve",
"nativeMethod": false
},
{
"methodName": "invoke",
"fileName": "StandardEngineValve.java",
"lineNumber": 116,
"className": "org.apache.catalina.core.StandardEngineValve",
"nativeMethod": false
},
{
"methodName": "service",
"fileName": "CoyoteAdapter.java",
"lineNumber": 408,
"className": "org.apache.catalina.connector.CoyoteAdapter",
"nativeMethod": false
},
{
"methodName": "process",
"fileName": "AbstractHttp11Processor.java",
"lineNumber": 1040,
"className": "org.apache.coyote.http11.AbstractHttp11Processor",
"nativeMethod": false
},
{
"methodName": "process",
"fileName": "AbstractProtocol.java",
"lineNumber": 607,
"className": "org.apache.coyote.AbstractProtocol$AbstractConnectionHandler",
"nativeMethod": false
},
{
"methodName": "run",
"fileName": "AprEndpoint.java",
"lineNumber": 2378,
"className": "org.apache.tomcat.util.net.AprEndpoint$SocketWithOptionsProcessor",
"nativeMethod": false
},
{
"methodName": "runWorker",
"fileName": "ThreadPoolExecutor.java",
"lineNumber": 1145,
"className": "java.util.concurrent.ThreadPoolExecutor",
"nativeMethod": false
},
{
"methodName": "run",
"fileName": "ThreadPoolExecutor.java",
"lineNumber": 615,
"className": "java.util.concurrent.ThreadPoolExecutor$Worker",
"nativeMethod": false
},
{
"methodName": "run",
"fileName": "Thread.java",
"lineNumber": 745,
"className": "java.lang.Thread",
"nativeMethod": false
}
],
"response": {
"context": {
"headers": {},
"entity": null,
"entityType": null,
"entityAnnotations": [],
"entityStream": {
"isCommitted": false,
"isClosed": false
},
"mediaType": null,
"requestCookies": {},
"acceptableMediaTypes": [
{
"type": "*",
"subtype": "*",
"parameters": {},
"quality": 1000,
"wildcardType": true,
"wildcardSubtype": true
}
],
"acceptableLanguages": [
"*"
],
"entityClass": null,
"allowedMethods": [],
"responseCookies": {},
"entityTag": null,
"links": [],
"stringHeaders": {},
"length": -1,
"language": null,
"location": null,
"date": null,
"lastModified": null,
"committed": false
},
"status": 500,
"metadata": {},
"mediaType": null,
"statusInfo": "INTERNAL_SERVER_ERROR",
"allowedMethods": [],
"entityTag": null,
"links": [],
"stringHeaders": {},
"entity": null,
"length": -1,
"language": null,
"location": null,
"date": null,
"lastModified": null,
"cookies": {},
"headers": {}
},
"localizedMessage": "Invalid request",
"suppressed": []
}