【问题标题】:JAX-WS webservice on Weblogic 12cWeblogic 12c 上的 JAX-WS 网络服务
【发布时间】:2014-12-17 21:31:58
【问题描述】:

我正在点击以下链接发布网络服务。

http://www.mkyong.com/webservices/jax-ws/jax-ws-java-web-application-integration-example/ http://stlarch.blogspot.com.tr/2013/02/building-jax-ws-webservices-in-weblogic.html http://www.mkyong.com/webservices/jax-ws/jax-ws-spring-integration-example/ http://examples.javacodegeeks.com/enterprise-java/jws/jax-ws-spring-integration-example/

此代码在部署在 Tomcat 上时有效。 但它不适用于 weblogic 12c。我需要提供额外的参数吗? 我在部署过程中没有异常。我在部署的应用程序下的 Webservices 部分看不到任何一项 weblogic 控制台。

更新: 部署 madhava 编码的 webservicetest.war 后

【问题讨论】:

  • 你的意思是在Weblogic服务器中部署后看不到Web Services?
  • 是的,我看不到,所以我无法通过 url 访问网络服务
  • 尝试使用您的 IP 地址而不是 localhost。首先你运行 CalculatorServiceClient
  • 不起作用。我们使用相同的 weblogic 版本吗?你使用 weblogic 12.1.3 吗?
  • 转到控制面板\网络和Internet\网络连接并检查您的IPV4并使用IP并尝试XXX.YYY.ZZ.AA:7001/…

标签: java weblogic jax-ws


【解决方案1】:

我创建了自己的应用程序来检查您的问题。确实它对我来说很好用。我正在与您分享相同的内容。

1)创建一个简单的Web应用程序。(在Eclipse File+New+Dynamic Web Project中)

2) 将接口创建为 Web 服务。

package com.madhava.service;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;

import com.madhava.CalculatorServiceConstant;
@WebService(name = CalculatorServiceConstant.Name.CALCULATOR_SERVICE, targetNamespace = CalculatorServiceConstant.CALCULATOR_SERVICE_TARGET_NAME_SPACE)
public interface CalculatorService {

    @WebMethod
    @WebResult(name="sum")Integer addNumber(@WebParam(name = "number1") Integer number1,
            @WebParam(name = "number2") Integer number2);

    @WebMethod
    @WebResult(name="difference")Integer subtractNumber(@WebParam(name = "number1") Integer number1,
            @WebParam(name = "number2") Integer number2);

    @WebMethod
    @WebResult(name="multiplication")Long multiplyNumber(@WebParam(name = "number1") Integer number1,
            @WebParam(name = "number2") Integer number2);

    @WebMethod
    @WebResult(name="division")Double divideNumber(@WebParam(name = "number1") Integer number1,
            @WebParam(name = "number2") Integer number2);
}

3) 创建一个实现您编写的网络服务的类。

    import javax.ejb.Stateless;
    import javax.jws.WebService;

    import com.madhava.service.CalculatorService;

    @Stateless
    @WebService(portName = CalculatorServiceConstant.PortName.CALCULATOR_SERVICE, serviceName = CalculatorServiceConstant.ServiceName.CALCULATOR_SERVICE, endpointInterface = CalculatorServiceConstant.EndPointInterface.CALCULATOR_SERVICE, targetNamespace = CalculatorServiceConstant.CALCULATOR_SERVICE_TARGET_NAME_SPACE)
    public class CalculatorServiceImpl implements CalculatorService {

        @Override
        public Integer addNumber(Integer number1, Integer number2) {
            if (number1 != null && number2 != null) {
                return number1 + number2;
            } else {
                return 0;
            }
        }

        @Override
        public Integer subtractNumber(Integer number1, Integer number2) {
            if (number1 != null && number2 != null) {
                if (number1 > number2) {
                    return number1 - number2;
                } else {
                    return number2 - number1;
                }
            } else {
                return 0;
            }
        }

        @Override
        public Long multiplyNumber(Integer number1, Integer number2) {
            if (number1 != null && number2 != null) {
                return (long) (number1 * number2);
            } else {
                return 0L;
            }
        }

        @Override
        public Double divideNumber(Integer number1, Integer number2) {
            if ((number1 != null && number2 != null) || number2!=0) {
                return (double) (number1 / number2);
            }
 else {
                return 0.0D;
            }
        }

    }

4)创建一个类,保留名称、端口名、服务名称等。

public class CalculatorServiceConstant {

    public static final String CALCULATOR_SERVICE_TARGET_NAME_SPACE = "http://calculatorservices.madhava.com";

    private CalculatorServiceConstant() {

    }

    public static class Name {
        public static final String CALCULATOR_SERVICE = "CalculatorService";

        // Private Constructor
        private Name() {

        }

    }

    public static class PortName {
        public static final String CALCULATOR_SERVICE = "CalculatorServicePort";

        // Private Constructor
        private PortName() {

        }
    }


    public static class ServiceName {

        public static final String CALCULATOR_SERVICE = "CalculatorServiceService";

        // Private Constructor
        private ServiceName() {

        }
    }


    public static class EndPointInterface {

        public static final String CALCULATOR_SERVICE = "com.madhava.service.CalculatorService";

        // Private Constructor
        private EndPointInterface() {

        }
    }



    public static class JNDI {

        public static final String CALCULATOR_SERVICE = "CalculatorService#com.madhava.service.CalculatorService";

        // Private Constructor
        private JNDI() {

        }
    }

}

5)创建应用程序的war文件并将其部署在weblogic服务器中。在这里,您将能够看到 Web 服务为“CalculatorServiceService”

在 weblogic 中测试客户端的 URL:

http://localhost:7001/wls_utc/?wsdlUrl=http%3A%2F%2Flocalhost%3A7001%2FWebServicesTest%2FCalculatorServiceService%3FWSDL

6)最后检查它是否正常工作我已经创建了客户端类。

package com.madhava.client;

import java.net.MalformedURLException;
import java.net.URL;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;

import com.madhava.CalculatorServiceConstant;
import com.madhava.service.CalculatorService;

public class CalculatorServiceClient {

    /**
     * @param args
     * @throws MalformedURLException 
     */
    public static void main(String[] args) throws MalformedURLException {

        URL url = new URL("http://localhost:7001/WebServicesTest/CalculatorServiceService?wsdl");
        QName qname = new QName(CalculatorServiceConstant.CALCULATOR_SERVICE_TARGET_NAME_SPACE, CalculatorServiceConstant.ServiceName.CALCULATOR_SERVICE);

        Service service = Service.create(url, qname);

        CalculatorService calculatorService = service.getPort(CalculatorService.class);

        System.out.println(calculatorService.addNumber(10,20));

    }

}

希望对你有帮助!

【讨论】:

  • 你能分享一下web.xml吗?
  • 我已将您的类文件添加到我的项目中,但仍然没有看到任何 web 服务部分。这是我的项目,你能编译和部署吗? dropbox.com/s/u5x7wtit3ieqxel/WebServicesExample.7z?dl=0
  • 你能和我分享你的战争文件吗?
  • 暂时忘记了 mkyong 的项目。现在你请尝试创建一个我上面提到的新项目并检查它是否工作。我的互联网现在很慢(一旦我的互联网很好,我会上传)。我在我的项目中只完成了上述步骤。
  • 这很简单,但是如果你需要一个soap处理程序,weblogic 文档希望你做一些疯狂的 jwsc ant task gen 的东西,真的吗?
【解决方案2】:

我已阅读以下链接,然后应用了servlet 映射技术。 我可以访问wsdl 并通过SOAPUI 成功发出SOAP 请求

http://www.krestjaninoff.ru/2013/09/custom-context-path-for-jax-ws-web.html

<servlet> 
    <servlet-name>TestWSPort</servlet-name> 
    <display-name>TestWSPort</display-name> 
    <servlet-class>name.krestjaninoff.TestWSService</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>TestWSPort</servlet-name> 
    <url-pattern>myOwn/path/TestWS</url-pattern> 
</servlet-mapping> 

这是我创建的项目,你可以下载 https://www.dropbox.com/s/vztkfqxekw43n4a/WeblogicJaxWsProject.zip?dl=0

感谢上面链接所提供帖子的所有者 Mikhail Krestjaninoff

【讨论】:

  • 这是个好东西,大多数时候你会发现关于 sun-jaxws.xml 的参考 impl 和废话,但是如果你使用 weblogic 或 websphere,你就不要使用参考 impl
  • 提供的两个网址都不起作用。请发布完整的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-18
  • 1970-01-01
  • 1970-01-01
  • 2018-05-22
  • 2012-04-15
  • 1970-01-01
相关资源
最近更新 更多