端点 SWS 没有适配器

2024-01-01

我正在尝试使用创建一个简单的 Hello World WebServicethis http://static.springsource.org/spring-ws/sites/2.0/reference/html/tutorial.html教程。

我正在运行Java 1.7.0_04,Spring 2.1,一切都是用Maven构建并用Tomcat6部署的。但是,当尝试发送 SOAP 请求 (soapUI) 时,服务器返回我

No adapter for endpoint [public org.jdom.Element com.mycompany.hr.ws.HolidayEndpoint.handleHolidayRequest(org.jdom.Element) throws java.lang.Exception]: Is your endpoint annotated with @Endpoint, or does it implement a supported interface like MessageHandler or PayloadEndpoint?

我认为注释有问题,但是我的文件如下所示:

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
         version="2.4">

    <display-name>Khozzy custom WebService</display-name>

    <servlet>
        <servlet-name>spring-ws</servlet-name>
        <servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>

        <init-param>
            <param-name>transformWsdlLocations</param-name>
            <param-value>true</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>spring-ws</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

</web-app>

spring-ws-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:sws="http://www.springframework.org/schema/web-services"
       xsi:schemaLocation=" http://www.springframework.org/schema/beans
                            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                            http://www.springframework.org/schema/web-services
                            http://www.springframework.org/schema/web-services/web-services-2.0.xsd
                            http://www.springframework.org/schema/context
                            http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:component-scan base-package="com.mycompany.hr.ws" />
    <context:component-scan base-package="com.mycompany.hr.service" />

    <sws:annotation-driven />

    <sws:dynamic-wsdl id="holiday" portTypeName="HumanResource" locationUri="/holidayService/" targetNamespace="http://mycompany.com/hr/definitions">
        <sws:xsd location="/WEB-INF/hr.xsd"/>
    </sws:dynamic-wsdl>
</beans>

HolidayEndpoint.java

package com.mycompany.hr.ws;

import com.mycompany.hr.service.HumanResourceService;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.Namespace;
import org.jdom.xpath.XPath;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ws.server.endpoint.annotation.Endpoint;
import org.springframework.ws.server.endpoint.annotation.PayloadRoot;
import org.springframework.ws.server.endpoint.annotation.RequestPayload;
import org.springframework.ws.server.endpoint.annotation.ResponsePayload;

import java.text.SimpleDateFormat;
import java.util.Date;

@Endpoint
public class HolidayEndpoint {
    private static final String NAMESPACE_URI = "http://mycompany.com/hr/schemas";
    private XPath startDateExpression;
    private XPath endDateExpression;
    private XPath nameExpression;

    private HumanResourceService humanResourceService;

    @Autowired
    public HolidayEndpoint(HumanResourceService humanResourceService) throws JDOMException {
        this.humanResourceService = humanResourceService;

        Namespace namespace = Namespace.getNamespace("hr",NAMESPACE_URI);

        startDateExpression = XPath.newInstance("//hr:StartDate");
        startDateExpression.addNamespace(namespace);

        endDateExpression = XPath.newInstance("//hr:EndDate");
        endDateExpression.addNamespace(namespace);

        nameExpression = XPath.newInstance("concat(//hr:FirstName, ' ',//hr:LastName)");
        nameExpression.addNamespace(namespace);
    }

    @PayloadRoot(namespace = NAMESPACE_URI, localPart = "HolidayRequest")
    @ResponsePayload
    public Element handleHolidayRequest(@RequestPayload Element holidayRequest) throws Exception {
        Element toReturn = null;

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date startDate = dateFormat.parse(startDateExpression.valueOf(holidayRequest));
        Date endDate = dateFormat.parse(endDateExpression.valueOf(holidayRequest));
        String name = nameExpression.valueOf(holidayRequest);

        humanResourceService.bookHoliday(startDate,endDate,name);
        return toReturn;
    }
}

hr.xsd

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:hr="http://mycompany.com/hr/schemas"
           elementFormDefault="qualified"
           targetNamespace="http://mycompany.com/hr/schemas">

    <xs:element name="HolidayRequest">
        <xs:complexType>
            <xs:all>
                <xs:element name="Holiday" type="hr:HolidayType"/>
                <xs:element name="Employee" type="hr:EmployeeType"/>
            </xs:all>
        </xs:complexType>
    </xs:element>

    <xs:complexType name="HolidayType">
        <xs:sequence>
            <xs:element name="StartDate" type="xs:date"/>
            <xs:element name="EndDate" type="xs:date"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="EmployeeType">
        <xs:sequence>
            <xs:element name="Number" type="xs:integer"/>
            <xs:element name="FirstName" type="xs:string"/>
            <xs:element name="LastName" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>

</xs:schema>

这是您问题的有效解决方案:

将此依赖项添加到您的pom.xml

将源中的 jdom 导入更改为 jdom2

这是 HolidayEndpoint 的更新版本:

package com.mycompany.ws_template.endpoint;

import com.mycompany.ws_template.service.HumanResource;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.jdom2.JDOMException;
import org.jdom2.Namespace;
import org.jdom2.Element;
import org.jdom2.filter.Filters;
import org.jdom2.xpath.XPathExpression;
import org.jdom2.xpath.XPathFactory;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ws.server.endpoint.annotation.Endpoint;
import org.springframework.ws.server.endpoint.annotation.PayloadRoot;
import org.springframework.ws.server.endpoint.annotation.RequestPayload;


@Endpoint
public class HolidayEndpoint {

private static final String NAMESPACE_URI = "http://www.mycompany.com/holiday-service/schemas/holiday-request";

private XPathExpression<Element> startDateExpression;
private XPathExpression<Element> endDateExpression;
private XPathExpression<Element> nameExpression;
private XPathExpression<Element> surnameExpression;

@Autowired private HumanResource holidayService;

public HolidayEndpoint() throws JDOMException {

    Namespace namespace = Namespace.getNamespace("hr", NAMESPACE_URI);

    XPathFactory xpathFactory = XPathFactory.instance();
    startDateExpression = xpathFactory.compile("//hr:StartDate", Filters.element(), null, namespace);
    endDateExpression = xpathFactory.compile("//hr:EndDate", Filters.element(), null, namespace);
    nameExpression = xpathFactory.compile("//hr:EmployeeName", Filters.element(), null, namespace);
    surnameExpression = xpathFactory.compile("//hr:EmployeeSurname", Filters.element(), null, namespace);
}

@PayloadRoot(namespace = NAMESPACE_URI, localPart = "HolidayRequest")
public void handleHolidayRequest(@RequestPayload Element holidayRequest) throws Exception {

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Date startDate = sdf.parse(startDateExpression.evaluate(holidayRequest).get(0).getValue());
    Date endDate = sdf.parse(endDateExpression.evaluate(holidayRequest).get(0).getValue());
    String name = nameExpression.evaluate(holidayRequest).get(0).getValue() + surnameExpression.evaluate(holidayRequest).get(0).getValue();

    holidayService.bookHoliday(startDate, endDate, name);
}

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

端点 SWS 没有适配器 的相关文章

随机推荐

  • 使用 Cocoa Lumberjack 日志框架立即刷新日志语句,NSLog 刷新到控制台的方式

    许多 iOS 开发者发现Cocoa Lumberjack 日志框架 https github com robbiehanson CocoaLumberjack readme满足这么简单的需求NSLog声明没有 这让人想起 Java 世界中的
  • 如果前五列中为 NaN,则删除行

    我有一个 pandas 数据框 尺寸为 89 行 x 13 列 我想删除一个entire row if NaN出现在前五列中 这是一个例子 LotName C15 C16 C17 C18 C19 Spots15 Spots16 Cherry
  • 如何使除一个之外的一组互斥属性中的任何一个

    我有一个遗留 API 我试图在 JSON 模式中定义 该对象有一个奇怪的结构 其中有一组 4 个属性 其中任何一个都是必需的 并且其中 3 个是互斥的 之后还有 30 多个共享可选属性 我将它们标记为 e g foo bar baz 123
  • 是否可以使用 TortoiseSVN 获取统计数据?

    是否可以获得有关每个用户贡献 总行数等的统计数据 您可以通过使用 显示日志 然后 统计 IIRC 底部的按钮 来获取基本统计数据
  • 如何将对象插入流星集合

    我刚刚开始学习 Meteorjs 问题多于答案 我想将我的应用程序的翻译存储到临时集合中 并订阅 Iron Router 来发布它 我有一个字典对象 我想将其插入到集合中 这是我的做法 In 服务器 translations js tran
  • python 和 pyPdf - 如何从页面中提取文本,以便行与行之间有空格

    目前 如果我使用 pyPdf 和 extractText 创建 pdf 页面的页面对象 会发生的情况是行连接在一起 例如 如果页面的第 1 行显示 hello 第 2 行显示 world 则从 extractText 返回的结果文本是 he
  • NSView 添加子视图后的鼠标事件

    在我向 NSView 添加子视图后 我的鼠标事件响应 NSView 减去 addedSubVIew 的区域 我怎样才能避免这种情况 我希望它对所有超级视图做出响应 谢谢 您还可以在容器视图中实现 hitTest 方法 NSView hitT
  • “加载失败!”控制台开发者谷歌

    当我转到我的个人资料时https console developers google com https console developers google com显示 加载失败 错误并且在仪表板或活动中不显示任何内容 清除浏览器缓存在 C
  • 如何检测用户何时切换到登录屏幕?

    我需要知道用户何时切换到登录屏幕 由 ctrl alt del 触发 为了规避 WPF 中令人讨厌的错误 https connect microsoft com VisualStudio feedback details 602232 wh
  • 监控应用程序内存使用情况的正确方法是什么?

    出于调试目的 我编写了这个小静态方法 public static long CheckMemory long maxMemorySizeBytes GC Collect GC WaitForPendingFinalizers GC Coll
  • 无法使用我的窗口应用程序连接到在线数据库。 (C# winforms)

    我注册了一个免费网络托管帐户 该网站提供 MySQL 数据库 我尝试使用 Windows 应用程序访问它 但无法连接到服务器 请考虑我的代码 using System using System Collections Generic usi
  • Android 禁用屏幕保护程序

    我想在应用程序运行时禁用屏幕保护程序 怎样才能做到呢 禁用 启用屏幕保护程序的最佳位置在哪里 在第一个活动中 在application java中 唤醒锁权限必须在清单中指定
  • java局部变量不可用

    我从 Eclipse 调试器中收到以下错误 局部变量不可用 尝试尽可能地修剪代码 问题非常简单 我必须使用 Divise 类中的 DivisiveUI UpdateLog 方法 并使用 Cluster 类中的变量 该部门有一个包含所有集群的
  • miniconda 无法安装 anaconda(安装 anaconda 自定义但没有软件包)

    我正在使用以下脚本以静默模式在计算机上安装 重新安装 最新的 anaconda 长时间运行正常 成功安装anaconda 然而 它最近坏了 现在不是安装所有 anaconda 软件包 而是最终安装 anaconda custom py36h
  • 我们如何复制包含 RSA 密钥的 EVP_PKEY?

    我找到了这个功能EVP PKEY copy parameters 可以复制EVP PKEY 但一些关于此函数的文档说它只能用于 DSA ECC 算法 官方文档 来自openssl org http www openssl org 没有提及该
  • 15 谜题启发式

    The 15 Puzzle是涉及启发式的建模算法的经典问题 此问题常用的启发式方法包括计算错位图块的数量以及计算每个块与其在目标配置中的位置之间的曼哈顿距离之和 请注意 两者都是可接受的 即它们永远不会高估剩余的移动次数 这确保了某些搜索算
  • if 条件从 ruby​​ 数组获取值

    我正在使用以下代码映射一个数组 url http www cnn com page Mechanize new get url images url page images map img img url to s if img width
  • Java 读取文件行并仅提取有用的信息

    我有文件 file1 file2 包含以下内容 2017 02 01 10 00 00 start running error yes doing no finish remind alarmno 123456789 logno 12345
  • 使用最大行长度简洁地序列化 JSON

    因此 我正在生成一个可能很长的 JSON 字符串 以便在 Sendgrid 的 SMTP API 中使用 因为它作为 SMTP 标头 所以它应该具有最大行长度 建议 72 但绝对不超过 1000 文档末尾描述了一种简单的解决方案 http
  • 端点 SWS 没有适配器

    我正在尝试使用创建一个简单的 Hello World WebServicethis http static springsource org spring ws sites 2 0 reference html tutorial html教