Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix:Fix xmlrpc error #187

Merged
merged 1 commit into from
Aug 23, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.terwergreen.jvueserver;

import com.terwergreen.jvueserver.constant.JVueConstants;
import com.terwergreen.jvueserver.coresevice.xmlrpc.MyXmlRpcServlet;
import com.terwergreen.jvueserver.util.SpringBeanUtils;
import org.apache.xmlrpc.webserver.XmlRpcServlet;
import org.springframework.boot.SpringApplication;
Expand All @@ -9,6 +10,9 @@
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;

/**
* @author terwer
*/
@SpringBootApplication
public class JVueServerApplication {

Expand All @@ -21,11 +25,15 @@ public static void main(String[] args) {
SpringBeanUtils.setContext(applicationContext);
}

@SuppressWarnings({"unchecked", "rawtypes"})
/**
* 注册Xmlrpc
*/
@Bean
public ServletRegistrationBean registerServlet() {
XmlRpcServlet xmlRpcServlet = new MyXmlRpcServlet();

return new ServletRegistrationBean(
new XmlRpcServlet(),
xmlRpcServlet,
JVueConstants.CONSTANT_XMLRPC_NAME // xml-rpc访问接口
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,18 @@
import com.terwergreen.jvueserver.model.SiteConfig;
import com.terwergreen.jvueserver.service.PostService;
import com.terwergreen.jvueserver.service.UsersService;
import com.terwergreen.jvueserver.util.ReflectUtil;
import com.terwergreen.jvueserver.util.SpringBeanUtils;
import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.common.XmlRpcNotAuthorizedException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

/**
* metaWeblogApi的具体实现
Expand All @@ -37,6 +34,7 @@ public class MetaWeblogImpl implements IMetaWeblog {
private CommonService commonService;
private Object userService;
private PostService postService;
private SiteConfig siteConfig;

public CommonService getCommonService() {
if (commonService == null) {
Expand All @@ -61,6 +59,7 @@ public Object getUserService() {
}

public MetaWeblogImpl() {
siteConfig = getCommonService().getSiteConfig();
logger.info("容器中注册MetaWeblogImpl");
}

Expand All @@ -78,12 +77,11 @@ private Map<String, Object> isValid(String username, String password) throws Xml
return rtnResult;
}

@Override
public List<Map<String, Object>> getUsersBlogs(String appKey, String username, String password) throws XmlRpcException {
logger.info("[blogger.getUsersBlogs] -> appKey: {}, username: {}, password: {}", appKey, username, password);
isValid(username, password);

SiteConfig siteConfig = getCommonService().getSiteConfig();

List<Map<String, Object>> usersBlogs = new ArrayList<>();
Map<String, Object> blogInfo = new HashMap<>();
blogInfo.put("blogid", "JVue");
Expand Down Expand Up @@ -185,19 +183,9 @@ public Map<String, Object> getPost(String postid, String username, String passwo
try {

Post postObj = getPostService().getPostById(Integer.valueOf(postid));

// ==========
// 数据转换开始
// ArticleCategory ac = getCategory(postJson.getJSONArray("categories"));
// article.setCategory(ac);
post.put("title", postObj.getTitle());
post.put("description", postObj.getContent());
// article.setKeywords(postJson.getString("mt_keywords"));
post.put("wp_slug", postObj.getName());
post.put("post_status", postObj.getStatus());
post.put("dateCreated", postObj.getCreated());
// post page essay note
post.put("post", postObj.getType());
post = transformPost(postObj);
// 数据转换结束
// ==========
} catch (Exception e) {
Expand All @@ -208,6 +196,24 @@ public Map<String, Object> getPost(String postid, String username, String passwo
return post;
}

private Map<String, Object> transformPost(Post postObj) {
Map<String, Object> post = new HashMap<>();

// post.put("categories", postObj.getCategory());
post.put("postid", postObj.getId());
post.put("title", postObj.getTitle());
post.put("description", postObj.getContent());
post.put("mt_keywords", postObj.getTags());
post.put("wp_slug", postObj.getName());
post.put("post_status", postObj.getStatus());
post.put("dateCreated", postObj.getCreated());
post.put("permalink", siteConfig.getWeburl() + "/post/" + postObj.getId() + ".html");
// post page essay note
post.put("post", postObj.getType());

return post;
}

@Override
public List<Map<String, String>> getCategories(String blogid, String username, String password) throws XmlRpcException {
logger.info("metaWeblog.getCategories -> blogid: {}", blogid);
Expand All @@ -219,12 +225,27 @@ public List<Map<String, String>> getCategories(String blogid, String username, S
public List<Map<String, Object>> getRecentPosts(String blogid, String username, String password, int numberOfPosts) throws XmlRpcException {
logger.info("metaWeblog.getRecentPosts -> blogid: {}, numberOfPosts: {}", blogid, numberOfPosts);

// Object bean = SpringBeanUtils.getBean("com.terwergreen.plugins.blog.service.impl.PostServiceImpl");
// Map pramMap = new HashMap();
// Object posts = ReflectUtil.invoke(bean, "getRecentPosts", new Class[]{Map.class}, new Object[]{pramMap});
// System.out.println("posts = " + posts);
List<Map<String, Object>> posts = new ArrayList<>();

try {
Map<String, Object> paraMap = new HashMap<>();
paraMap.put("pageSize", numberOfPosts);
List<Post> postList = getPostService().getRecentPosts(paraMap);

for (Post postObj : postList) {
// ==========
// 数据转换开始
Map<String, Object> post = transformPost(postObj);
posts.add(post);
// 数据转换结束
// ==========
}
} catch (Exception e) {
e.printStackTrace();
throw new XmlRpcException(500, e.getMessage());
}

return null;
return posts;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.terwergreen.jvueserver.coresevice.xmlrpc;

import org.apache.xmlrpc.server.XmlRpcServerConfigImpl;
import org.apache.xmlrpc.webserver.XmlRpcServlet;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;

/**
* 自定义XmlrpcServlet处理类
*
* @name: MyXmlRpcServlet
* @author: terwer
* @date: 2022-08-23 15:41
**/
public class MyXmlRpcServlet extends XmlRpcServlet {
@Override
public void init(ServletConfig pConfig) throws ServletException {
super.init(pConfig);

// enabledForExtensions: 指定是否启用 Apache 对 XML-RPC 的扩展。
XmlRpcServerConfigImpl serverConfig = (XmlRpcServerConfigImpl) this.getXmlRpcServletServer().getConfig();
serverConfig.setEnabledForExceptions(true);
serverConfig.setEnabledForExtensions(true);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,12 @@ public class PostServiceImpl implements PostService {

@Override
public List<Post> getRecentPosts(Map<String, Object> paraMap) {
return null;
Map<String, Object> newParamMap = new HashMap<>();
newParamMap.put("postType", PostTypeEmum.POST_TYPE_POST.getName());

Integer pageSize = (Integer) paraMap.getOrDefault("pageSize", 10);
PageInfo<Post> pageList = getPostsByPage(1, pageSize, newParamMap);
return pageList.getList();
}

@Override
Expand Down