春天的肥皂。无法访问wsdl文件

问题描述 投票:1回答:1

我尝试创建soap服务,我从Spring-WS及其参考文档开始。但我有一些问题:当我将此应用程序部署到tomcat时,在日志中我看到这样的消息:

org.apache.catalina.core.ApplicationContext.log No Spring WebApplicationInitializer types detected on classpath

然后,在该应用程序已部署的地方,我尝试访问wsdl文件,但我找不到404。我做错了什么?

网嗯

    <?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>Archetype Created Web Application</display-name>

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

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


</web-app>

弹簧-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-2.0.xsd
         http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context.xsd
           ">

    <context:component-scan base-package="soap"/>
    <sws:annotation-driven/>

    <sws:dynamic-wsdl id="service"
                      portTypeName="HumanResource"
                      locationUri="http://localhost:8080/service/"
                      targetNamespace="hr:">
        <sws:xsd location="/WEB-INF/hr.xsd"/>
    </sws:dynamic-wsdl>

</beans>

schema xsd

<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:sequence>
                <xs:element name="Holiday" type="hr:HolidayType"/>
                <xs:element name="Employee" type="hr:EmployeeType"/>
            </xs:sequence>
        </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>

和端点

package soap;

import org.jdom2.Element;
import org.jdom2.Namespace;
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;

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

@Endpoint
public class HolidayRequest {
    private static final String NAMESPACE_URI = "http://mycompany.com/hr/schemas";
    private XPathExpression<Element> startDateExpression;
    private XPathExpression<Element> endDateExpression;
    private XPathExpression<Element> firstNameExpression;
    private XPathExpression<Element> lastNameExpression;
    private HumanResourceService humanResourceService;

    @Autowired
    public void HolidayEndpoint(HumanResourceService humanResourceSerivce) {
        this.humanResourceService = humanResourceSerivce;
        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);
        firstNameExpression = xPathFactory
                .compile("//hr:FirstName", Filters.element(), null, namespace);
        lastNameExpression = xPathFactory
                .compile("//hr:LastName", Filters.element(), null, namespace);
    }

    @PayloadRoot(namespace = NAMESPACE_URI, localPart = "HolidayRequest")
    public void handleHolidayRequest(@RequestPayload Element holidayRequest)
            throws Exception {
        Date startDate = parseDate(startDateExpression, holidayRequest);
        Date endDate = parseDate(startDateExpression, holidayRequest);
        String name =
                firstNameExpression.evaluateFirst(holidayRequest).getText()
                        + " " + lastNameExpression.evaluateFirst(holidayRequest)
                        .getText();
        humanResourceService.bookHoliday(startDate, endDate, name);

    }

    private Date parseDate(XPathExpression<Element> expression, Element element)
            throws ParseException {
        Element result = expression.evaluateFirst(element);
        if (result != null) {
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
            return dateFormat.parse(result.getText());
        } else {
            throw new IllegalArgumentException(
                    "Could not evaluate [" + expression + "] on [" + element
                            + "]");
        }
    }

}

pom.hml

   <modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.hr</groupId>
<artifactId>holidayService</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>holidayService Spring-WS Application</name>
<url>http://www.springframework.org/spring-ws</url>
<build>
    <finalName>root</finalName>
</build>

<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-oxm</artifactId>
        <version>5.1.5.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.jdom</groupId>
        <artifactId>jdom2</artifactId>
        <version>2.0.6</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.ws</groupId>
        <artifactId>spring-ws-core</artifactId>
        <version>3.0.7.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>jaxen</groupId>
        <artifactId>jaxen</artifactId>
        <version>1.1</version>
    </dependency>
</dependencies>

还有,“targetNamespace”。它是什么?我能删除吗?先感谢您!

java spring web-services soap spring-ws
1个回答
0
投票

问题出在tomcat中。它没有部署war文件。重新安装后一切都好

© www.soinside.com 2019 - 2024. All rights reserved.