Страницы

Поиск по вопросам

Показаны сообщения с ярлыком веб-служба. Показать все сообщения
Показаны сообщения с ярлыком веб-служба. Показать все сообщения

четверг, 23 января 2020 г.

Ошибка SOAP looks like we got no XML document.Как исправить?

#php #веб_программирование #soap #веб_служба


Добрый вечер.

Начал разбираться с SOAP,набросал простенький сервис новостей и клиент под него и
получил ошибку.

Что есть:


сервис новостей,находится в папке news (все это крутится на OpenServre`e)
soap-server,находится в папке news/soap
wsdl файл news.wsdl,находится в папке news/soap
soap-client,находится в папке localhost


Что я делаю:

Запускаю OpenServer,перехожу на localhost - вылетает 


  Операция Client вернула ошибку: looks like we got no XML document


Проверил кодировки и BOM-символы,все в порядке.

soap-server.php

setClass("NewsService");
// Запуск сервера
$server->handle();


soap-client.php

getNewsCount();
  echo "

Всего новостей: $result

"; // Сколько новостей в категории Политика? $result = $client->getNewsCountByCat(1); echo "

Всего новостей в категории Политика:$result

"; // Покажем конкретную новость $result = $client->getNewsById(5); $news = unserialize(base64_decode($result)); var_dump($news); }catch(SoapFault $e){ echo 'Операция '.$e->faultcode.' вернула ошибку: '.$e->getMessage(); } news.wsdl Где,я ошибся? Что исправить? Признателен за уделенное время.


Ответы

Ответ 1



Добавте ob_clean(); ob_start(); Перед $server->handle();

пятница, 10 января 2020 г.

Переделать веб приложение с сервлетами в RESTful

#java #servlet #rest #веб_служба


Есть приложение, которое соединяется с бд через glassfish ресурсы и все работает.
Используются servlet. Как это можно реализовать с использованием RESTful. Не понимаю
что куда должно передаваться и как. Как REST принимает из формы и возвращает. Все что
я находила было с возвращением статуса, а не  ресурсов. Так же интересно как реализовать
ввод логина и пароля и получать приветствие с именем пользователя, соответствующего
этим логину и паролю в бд. Я совсем плаваю в этом.( 

CRUD операции: 

@Stateless
public class UserLogIn {

@PersistenceContext(unitName = "LEADER")
public EntityManager em;

public UserLogIn(){}



public void add(User user){
    if (!user.getLogin().equals("") || !user.getPassword().equals("") || !user.getUsername().equals("")){
        em.persist(user);
    }
}
public void delete(int id){
    em.remove(getUser(id));
}

public User getUser(int id){
    return em.find(User.class, id);

}
public void update(User user){
    em.merge(user);
}

public List getAll(){
    TypedQuery namedQuery = em.createNamedQuery("User.getAll", User.class);
    return namedQuery.getResultList();
}

}


Сущность: 

@Entity
@Table(name = "annusers")
@NamedQuery(name = "User.getAll", query = "SELECT u FROM User u")
public class User {
@Id
   @SequenceGenerator(name="ad_point_gen",allocationSize=1,sequenceName="ad_points_id_ad_point_seq")
@GeneratedValue(generator="ad_point_gen",strategy=GenerationType.SEQUENCE)
@Column(name = "id", nullable = false)
private Integer id;
@Column(name = "login", nullable = false)
private String login;
@Column(name = "password", nullable = false)
private String password;
@Column(name="username", nullable = false)
private String username;

public User() {
}

public User(String login, String password, String username) {
    this.login = login;
    this.password = password;
    this.username = username;
}

public String getLogin() {
    return login;
}

public void setLogin(String login) {
    this.login = login;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

@Override
public String toString() {
    return "User{" +
            "login='" + login + '\'' +
            ", password='" + password + '\'' +
            ", username='" + username + '\'' +
            '}';
}

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}
}


Классы сервлетов для работы с CRUD операциями

@WebServlet("/add")
public class AddAndEditUserServlet extends HttpServlet{
   @EJB
   private UserLogIn userLogIn;

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
IOException{
    resp.setContentType("text/html");
    req.setCharacterEncoding("UTF-8");

    if(req.getParameter("edit")!=null){
        int id = Integer.valueOf(req.getParameter("edit"));
        User user = userLogIn.getUser(id);
        req.setAttribute("user",user);
    }

    req.getRequestDispatcher("/add.jsp").forward(req,resp);
}

@Override
protected  void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
IOException{
    resp.setContentType("text/html");
    req.setCharacterEncoding("UTF-8");

    String login = req.getParameter("login");
    String password = req.getParameter("password");
    String username = req.getParameter("username");

    if(!req.getParameter("id").equals("")){
        int id = Integer.valueOf(req.getParameter("id"));
        User user = userLogIn.getUser(id);
        user.setLogin(login);
        user.setPassword(password);
        user.setUsername(username);
        userLogIn.update(user);
    }else {
        userLogIn.add(new User(login, password,username));
    }

    resp.sendRedirect("list");
}

}


package com.mkyong.rest.servlet;



@WebServlet("/delete")
public class DeleteUser extends HttpServlet {

@EJB
private UserLogIn userLogIn;

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
    if(req.getParameter("id") != null && req.getParameter("id") != ""){
        int id = Integer.valueOf(req.getParameter("id"));
        userLogIn.delete(id);
    }
    resp.sendRedirect("list");
}
}





@WebServlet("/list")
public class UserServlet extends HttpServlet{

@EJB
private UserLogIn userLogIn;

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
IOException{
    List allUsers = userLogIn.getAll();
    req.setAttribute("users", allUsers);
    req.getRequestDispatcher("/list.jsp").forward(req,resp);
}

}

    


Ответы

Ответ 1



rest сервисы, как правило нужны для CRUD операций(создание, удаление, редактирование, удаление).например: @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ List allUsers = userLogIn.getAll(); req.setAttribute("users", allUsers); req.getRequestDispatcher("/list.jsp").forward(req,resp); } для запроса /list делает из бд выборку всех пользователей и перенаправляет запрос в list.jsp, где отображается список пользователей. Все что пришло от клиента, находится в объекте класса HttpServletRequest, например: req.getParameter("id") содержит http параметр id Update. Если делать именно рестовский сервис, то надо подключить библиотеку jackson для xml и GSON для json.в методе вместо resp.sendRedirect("list"); возвращаете свой объект, например: @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ List allUsers = userLogIn.getAll(); //.. String json = new Gson().toJson(allUsers); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); response.getWriter().write(json); }

Ответ 2



Вот так будет выглядеть метод rest-сервиса, который выводит приветствие. Импорты из пакета javax.ws.rs @POST @Path("/test-rest-service") @Produces(MediaType.TEXT_PLAIN) @Consumes(MediaType.TEXT_PLAIN) Response testMethod(String req) { String resp = "Hello " + req; return Response.status(200).entity(resp).encoding("UTF-8").build(); }

четверг, 26 декабря 2019 г.

Склонение русских слов по падежам

#php #веб_программирование #веб_служба #естественный_язык


Посоветуйте бесплатный сервис, относительно небольшую библиотеку или способы реализации
для склонения русских слов по падежам на сайте. Раньше, знаю, был Яндекс.Склонятор,
но сейчас он не доступен. 
    


Ответы

Ответ 1



http://morpher.ru/php/extension/ Первая ссылка из гугла. Вроде то, что Вам подходит.

пятница, 12 июля 2019 г.

Что лучше, веб-служба .asmx или служба WCF?

Прошу дать сравнительный анализ. Стоит ли применять asmx в проектах на .NET 4.0?


Ответ

WCF предоставляет абстракцию от протокола передачи данных. Кроме того, WCF позволяет более гибко управлять форматом сообщений. С другой стороны, с asmx меньше проблем в плане настройки масштабируемости. В WCF Вы будете постоянно бороться с таймаутами на ровном месте, а Web Services нормально работают прямо из коробки.

суббота, 16 марта 2019 г.

Ошибка SOAP looks like we got no XML document.Как исправить?

Добрый вечер.
Начал разбираться с SOAP,набросал простенький сервис новостей и клиент под него и получил ошибку.
Что есть:
сервис новостей,находится в папке news (все это крутится на OpenServre`e) soap-server,находится в папке news/soap wsdl файл news.wsdl,находится в папке news/soap soap-client,находится в папке localhost
Что я делаю:
Запускаю OpenServer,перехожу на localhost - вылетает
Операция Client вернула ошибку: looks like we got no XML document
Проверил кодировки и BOM-символы,все в порядке.
soap-server.php
setClass("NewsService"); // Запуск сервера $server->handle();
soap-client.php
getNewsCount(); echo "

Всего новостей: $result

"; // Сколько новостей в категории Политика? $result = $client->getNewsCountByCat(1); echo "

Всего новостей в категории Политика:$result

"; // Покажем конкретную новость $result = $client->getNewsById(5); $news = unserialize(base64_decode($result)); var_dump($news); }catch(SoapFault $e){ echo 'Операция '.$e->faultcode.' вернула ошибку: '.$e->getMessage(); }
news.wsdl







Где,я ошибся? Что исправить?
Признателен за уделенное время.


Ответ

Добавте
ob_clean(); ob_start();
Перед
$server->handle();

среда, 20 февраля 2019 г.

Переделать веб приложение с сервлетами в RESTful

Есть приложение, которое соединяется с бд через glassfish ресурсы и все работает. Используются servlet. Как это можно реализовать с использованием RESTful. Не понимаю что куда должно передаваться и как. Как REST принимает из формы и возвращает. Все что я находила было с возвращением статуса, а не ресурсов. Так же интересно как реализовать ввод логина и пароля и получать приветствие с именем пользователя, соответствующего этим логину и паролю в бд. Я совсем плаваю в этом.(
CRUD операции:
@Stateless public class UserLogIn {
@PersistenceContext(unitName = "LEADER") public EntityManager em;
public UserLogIn(){}

public void add(User user){ if (!user.getLogin().equals("") || !user.getPassword().equals("") || !user.getUsername().equals("")){ em.persist(user); } } public void delete(int id){ em.remove(getUser(id)); }
public User getUser(int id){ return em.find(User.class, id);
} public void update(User user){ em.merge(user); }
public List getAll(){ TypedQuery namedQuery = em.createNamedQuery("User.getAll", User.class); return namedQuery.getResultList(); }
}
Сущность:
@Entity @Table(name = "annusers") @NamedQuery(name = "User.getAll", query = "SELECT u FROM User u") public class User { @Id @SequenceGenerator(name="ad_point_gen",allocationSize=1,sequenceName="ad_points_id_ad_point_seq") @GeneratedValue(generator="ad_point_gen",strategy=GenerationType.SEQUENCE) @Column(name = "id", nullable = false) private Integer id; @Column(name = "login", nullable = false) private String login; @Column(name = "password", nullable = false) private String password; @Column(name="username", nullable = false) private String username;
public User() { }
public User(String login, String password, String username) { this.login = login; this.password = password; this.username = username; }
public String getLogin() { return login; }
public void setLogin(String login) { this.login = login; }
public String getPassword() { return password; }
public void setPassword(String password) { this.password = password; }
@Override public String toString() { return "User{" + "login='" + login + '\'' + ", password='" + password + '\'' + ", username='" + username + '\'' + '}'; }
public Integer getId() { return id; }
public void setId(Integer id) { this.id = id; }
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; } }
Классы сервлетов для работы с CRUD операциями
@WebServlet("/add") public class AddAndEditUserServlet extends HttpServlet{ @EJB private UserLogIn userLogIn;
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ resp.setContentType("text/html"); req.setCharacterEncoding("UTF-8");
if(req.getParameter("edit")!=null){ int id = Integer.valueOf(req.getParameter("edit")); User user = userLogIn.getUser(id); req.setAttribute("user",user); }
req.getRequestDispatcher("/add.jsp").forward(req,resp); }
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ resp.setContentType("text/html"); req.setCharacterEncoding("UTF-8");
String login = req.getParameter("login"); String password = req.getParameter("password"); String username = req.getParameter("username");
if(!req.getParameter("id").equals("")){ int id = Integer.valueOf(req.getParameter("id")); User user = userLogIn.getUser(id); user.setLogin(login); user.setPassword(password); user.setUsername(username); userLogIn.update(user); }else { userLogIn.add(new User(login, password,username)); }
resp.sendRedirect("list"); }
}
package com.mkyong.rest.servlet;

@WebServlet("/delete") public class DeleteUser extends HttpServlet {
@EJB private UserLogIn userLogIn;
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { if(req.getParameter("id") != null && req.getParameter("id") != ""){ int id = Integer.valueOf(req.getParameter("id")); userLogIn.delete(id); } resp.sendRedirect("list"); } }


@WebServlet("/list") public class UserServlet extends HttpServlet{
@EJB private UserLogIn userLogIn;
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ List allUsers = userLogIn.getAll(); req.setAttribute("users", allUsers); req.getRequestDispatcher("/list.jsp").forward(req,resp); }
}


Ответ

rest сервисы, как правило нужны для CRUD операций(создание, удаление, редактирование, удаление).например:
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ List allUsers = userLogIn.getAll(); req.setAttribute("users", allUsers); req.getRequestDispatcher("/list.jsp").forward(req,resp); }
для запроса /list делает из бд выборку всех пользователей и перенаправляет запрос в list.jsp, где отображается список пользователей. Все что пришло от клиента, находится в объекте класса HttpServletRequest, например:
req.getParameter("id")
содержит http параметр id
Update.
Если делать именно рестовский сервис, то надо подключить библиотеку jackson для xml и GSON для json.в методе вместо resp.sendRedirect("list"); возвращаете свой объект, например:
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ List allUsers = userLogIn.getAll(); //.. String json = new Gson().toJson(allUsers); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); response.getWriter().write(json); }